Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Pentru multa lume, principala ratiune de a invata un limbaj precum PHP ar fi interactiunea pe care o ofera cu bazele de date. In acest capitol caut sa explic cum se foloseste PHP si MySQL, pentru a memora informatii pe Web si cum includem toate acestea pe site-ul Web.
Este, de fapt, surprinzator cat de utila poate fi o baza de date, mai ales atunci cand poate fi folosita intr-un site Web. Sunt foarte multe lucruri care se pot face intr-un astfel de caz, de la afisarea unor simple liste si pana la producerea integrala a paginilor Web dintr-o baza de date. Cateva exemple cu PHP si MySQL, folosite impreuna, sunt:
Schimbarea - rotatia Banner-elor.
Pentru a realiza schimbarea pe ecran a imaginilor la diferitele vizitari ale unei pagini si a asigura astfel un interes mai mare al vizitatorilor, se poate folosi un script PHP care deschide o baza de date si extrage aleator o imagine sau un set de imagini, pentru a-l include intr-un set de pagini Web.
Scriptul PHP va contoriza deasemeni numarul de cate ori a fost vazut banner-ul, putand, cu modificari minore, sa urmareasca chiar si numarul de click-uri. Pentru a adauga, schimba sau edita bannerele, tot ce avem de facut este sa schimbam baza de date iar scriptul va incarca banner-ul corect in toate paginile site-ului Web.
Forumurile Web.
Sute de forumuri de dezbatere sunt acum realizate - ruleaza in PHP si MySQL. Acestea s-au dovedit mult mai eficiente dacat alte sisteme, creind cate o pagina pentru fiecare mesaj si oferind o larga varietate de optiuni. Toate paginile forumului pot fi actualizate prin schimbarea unui script PHP.
Bazele de Date.
Un astfel de exemplu (edificator) il ofera site-urile care dau toate informatiile dintr-o baza de date. Spre exemplu, Script Avenue este rulat de cateva scripturi, care furnizeaza toate informatiile dintr-o baza de date ampla. Toate categoriile de scripturi diferite pot fi accesate intr-un singur script exact prin schimbarea URL-ului pentru a accesa diferite parti ale bazei de date.
Site-urile Web.
Cand avem un site de mari dimensiuni - cu multe pagini, si dorim sa modificam aspectul general sau sa schimbam proiectul, chestiunea ar cere foarte mult timp pentru aducere la zi si incarcare.
Cu PHP si MySQL intregul site Web se poate reduce la unul sau doua scripturi PHP care sa acceseze o baza de date MySQL pentru a obtine informatiile pentru paginile Web. Pentru a actualiza sau a modifica proiectul centrului Web nu trebuie sa schimbam decat o pagina.
Sunt necesare trei componente pentru a putea rula scripturi PHP care sa acceseze baze de date MySQL.
In primul rand, este nevoie de un server Web.
Acesta poate fi sau pe calculatorul personal sau pe o 'gazda' Web. Oricare pachet - oricare tip de server Web este acceptat si va lucra cu PHP si MySQL, dar cel mai recomandat este Apache, care e public si gratis.
PHP trebuie sa fie instalat pe server.
Daca nu este deja instalat, puteti sa o faceti sau sa apelati la administratorul serverului Web, in acest sens. Pachetul de instalare poate fi descarcat - preluat de la https://PHP.net si este deasemeni public - gratuit. Daca nu sunteti sigur daca este sau nu instalat, o sa vedeti mai jos cum va puteti lamuri.
Chiar daca tot ce tine de administrarea bazelor de date poate fi realizat prin scripturi PHP, instalarea pe server a pachetului PHPMyAdmin poate aduce un plus de confort. Este un excelent set de scripturi care asigura o interfata administrativa pentru bazele de date MySQL. Este si public-gratuit.
Cu el puteti adauga, elimina, edita, salva si vizualiza bazele de date, fiind deosebit de util pentru depanare.
In fine, aveti nevoie de MySQL.
Acesta este de fapt pachetul de programe pentru gestiunea bazelor de date. Puteti folosi deasemeni multe alte sisteme de baze de date (SQL, Oracle etc.) dar aici discutam despre PHP/MySQL, deci avem nevoie de MySQL (cu toate ca se folosesc comenzi care tin de limbajul SQL 'merg' la oricare din sistemele de baze de date SQL). Si pachetul MySQL este public - gratuit, putand fi preluat din pagina oficiala a MySQL.
Daca nu puteti instala PHP si MySQL, sau daca gazda Web nu v-o permite, puteti apela la alt server Web, la alta gazda. Spre exemplu, Freedom2Surf este un server Web public, care acorda acces liber si suporta PHP, avand MySQL instalat. HostRocket este un alt server excelent care ofera spatiu de pana la 300 MO, si include PHP, MySQL si multe altele, dar percepe o taxa de abonament.
Cum aflam daca PHP si MySQL sunt instalate corect ?
Exista un test simplu, atat pentru PHP cat si pentru MySQL:
Lansati - deschideti un editor de texte si scrieti urmatoarele:
<?
phpinfo();
?>
salvand fisierul cu un nume precum phpinfo.php
Apoi incarcati acest fisier in spatiul web, pe server, apelandu-l, dupa aceea, din navigator. Daca PHP-ul este deja instalat veti capata o pagina plina cu toate detaliile instalarii respective. Parcurgeti atunci aceste informatii. Daca gasiti o sectiune despre MySQL atunci inseamna ca MySQL este si el deja instalat.
Bazele de date MySQL au un sistem de initializare standard (un setup). Este vorba de o baza de date, compusa din tabele, oarecum separate, continand diferite campuri, etc. chiar daca sunt parte dintr-o baza de date. Fiecare tabela contine inregistrari care sunt facute din campuri.
Procesul de instalare a unei baze de date MySQL difera de la o platforma la alta. In esenta este vorba peste tot de un nume al bazei de date, un nume de utilizator (cont) si o parola. Aceste informatii sunt cerute pentru conectarea la baza de date.
Daca aveti pachetul PHPMyAdmin (sau un program similar) instalat, atunci puteti sa intrati si sa va conectati introducand contul (numele de utilizator) si parola. Daca nu aveti asa ceva, atunci trebuie sa faceti intreaga administrare a bazelor de date folosind script-uri PHP (si o puteti face).
Mai inainte de a folosi orice legat de baza de date, trebuie sa va creati o tabela. O tabela este o sectiune a bazei de date pentru memorarea unor informatii structurate (legate). Intr-o tabela vom defini diferite campuri care vor fi folosite in acea tabela. Din cauza acestei constructii, aproape toate centrele cu baze de date trebuie sa fie satisfacute folosind doar o baza de date.
Crearea unei tabele in PHPMyAdmin este simpla, scrieti numele, selectati numarul de campuri si "apasati' butonul (click). Ajungeti atunci la un ecran setup in care trebuie sa creati campurile pentru baza de date. Daca folositi un script PHP pentru a crea propria baza de date, iar, completa creere si initializarea vor fi facute itr-o singura comanda.
Exista o larga varietate de campuri si de atribute disponibile in MySQL si vom discuta doar cateva din ele:
Tipul campului |
Descriere |
TINYINT |
Numar Intreg mic |
SMALLINT |
Numar Intreg mic |
MEDIUMINT |
Numar Intreg |
INT |
Numar Intreg |
VARCHAR |
Text (maximum 256 caractere) |
TEXT |
Text |
Acestea sunt doar cateva dintre campurile disponibile. O cautare pe Internet poate furniza lista cu toate tipurile de campuri permise.
Sa creem o tabela din PHP este ceva mai dificil decat cu MySQL. Avem de parcurs urmatorii pasi:
CREATE TABLE nume_tabel
Campurile sunt definite dupa cum urmeaza:
fieldname type(length) extra info,
Ultimul camp introdus nu poate include nici o virgula.
Vom crea o baza de date "contacts" pe care o voi descrie in continuare si o vom lua ca exemplu si in capitolele urmatoare in exemplificarea folsririi PHP cu MySQL. Baza de date de contact va contine toate informatiile de contact ale cunoscutilor introdusi in table, iar informatiile vor putea fi editate si consulate in internet.
Urmatoarele campuri vor fi folosite in baza de date:
Nume |
Tipul |
Lungimea |
Descrierea |
id |
INT |
Un identificator unic pentru fiecare inregistrare |
|
Nume |
VARCHAR |
Numele de familie al persoanei |
|
prenume |
VARCHAR |
Numele de botez al persoanei |
|
telefon |
VARCHAR |
Numarul de telefon |
|
mobil |
VARCHAR |
Numarul de telefon mobil |
|
fax |
VARCHAR |
Numarul de fax |
|
|
VARCHAR |
Adresa e-mail |
|
web |
VARCHAR |
Pagina Web personala |
Am folosit un tip de camp VARCHAR pentru coloana mumar_telefon/fax, chiar daca acestea sunt formate din cifre. Chiar daca am putea folosi tipul INT, este preferabil sa folosim VARCHAR pentru ca astfel vor fi permise spatii si cratime, precum si portiuni de text, la fel ca numerele scrise ca text (exemplu 1800-COMPANY) si cum nu vom initia apeluri telefonice de pe Web, totul e in ordine.
Exista inca ceva de care trebuie sa avem grije in aceasta baza de date. Campul id va fi pus ca PRIMARY, INDEX, UNIQUE si initializat ca auto_increment (pozitie ce apare in Extra in PHPMyAdmin). Ratiunea pentru asta este ca acesta va fi campul identificator (primar sau index) si deci trebuie sa fie unic. Definirea sa ca auto increment inseamna ca la adaugarea fiecarei inregistrari, cata vreme nu specificam acolo un id, acesta va primi ca valoare urmatorul numar.
Pentru a crea aceasta tabela vom folosi urmatoarea secventa de comenzi PHP. O parte dintre comenzile de mai jos n-au fost inca discutate, dar le vom explica in detaliu in continuare.
<?
$user='username';
$password='password';
$database='database';
mysql_connect(localhost,$user,$password);
@mysql_select_db($database) or die( 'Baza de date nu poate fi
selectata');
$query='CREATE TABLE contacts (
id int(6) NOT NULL auto_increment,
nume varchar(15) NOT NULL,
prenume varchar(15) NOT NULL,
telefon varchar(20) NOT NULL,
mobil varchar(20) NOT NULL,
fax varchar(20) NOT NULL,
email varchar(30) NOT NULL, web varchar(30) NOT NULL,
PRIMARY KEY (id),UNIQUE id (id),KEY id_2 (id))';
mysql_query($query);
mysql_close();
?>
Primul lucru care trebuie facut, mai inainte de a putea face ceva, este conectarea la baza de date MySQL. Acesta este un pas foarte important, pentru ca, daca nu suntem conectati, comenzile catre baza de date vor esua.
Practic, pentru a folosi o baza de date trebuie sa precizam numele de utilizator (username), parola (password) si numele bazei de date :
$username='nume_utilizator';
$password='parola';
$database='numele_bazei_de_date';
Desigur, aici s-ar putea
discuta daca nu este riscant sa pastram parola intr-un
fisier. Nu trebuie sa va alarmati, insa, deoarece
sursa PHP este prelucrata de server inainte de a fi trimisa
navigatorului, astfel incit este imposibil pentru orice utilizator sa
vada scriptul.
Apoi, avem nevoie de o comanda care sa lanseze conexiunea la baza de date:
mysqli_connect(localhost,$username,$password);
Pentru a putea folosi
aceasta functie precum si celelalte functii din pachetul
mysqli, trebuie ca pe serverul web sa fie instalata si
configurata extensia MySQLi. Manualul PHP este unealta ideala pentru
a va ajuta cu detaliile de configurare si instalare a acesteia. Pentru o
lista completa a functiilor disponibile in acest pachet va
puteti referi la capitolul Detalii de implementare.
Revenind la problema de fata, aceasta linie spune PHP-ului sa se conecteze la serverul de baze de date MySQL la 'localhost' (localhost se numeste serverul pe care ruleaza PHP-ul, astfel ca in afara cazului in care gazda Web indica altceva, vom folosi localhost si numele de cont memorat in $username si parola din $password.
Mai inainte de a discuta cum lucram cu baza de date, vom vedea inca o comanda:
mysqli_close();
Aceasta este o comanda
foarte importanta care inchide conexiunea cu serverul de baze de date.
Scriptul va rula inca, daca nu includem aceasta comanda,
iar prea multe conexiuni MySQL deschise pot cauza probleme serverului web. Este
un obicei bun sa includem comanda de inchidere de mai sus dupa ce am
introdus toate comenzile catre baza de date, pentru a mentine
platforma in buna stare.
Dupa ce ne-am conectat la severul de baze de date, trebuie sa selectam baza de date pe care vrem s-o folosim. Trebuie sa fie o baza de date la care avem acces cu respectivul nume de utilizator. Se foloseste urmatoarea comanda:
@mysqli_select_db($database) or die( 'Baza de date nu
poate fi selectata');
Aceasta spune PHP-ului sa
selecteze baza de date specificata in variabila $database (pe care am
definit-o mai inainte). Daca conexiunea nu se poate realiza procesul
(executia script-ului) se opreste afisand textul:
Baza de date nu poate fi selectata
Aceasta parte suplimentara 'or die' este buna pentru iesire, chiar daca nu asigura decat un minim control al erorii.
Dupa conectarea la server si selectia bazei de date dorite, putem incepe executia comenzilor pe server.
Exista doua moduri de a executa o comanda. Prima revine pur si simplu la introducerea comenzii in PHP. Acest lucru merge atunci cand nu apar rezultate ca urmare a executiei comenzii.
Cea de a doua varianta este sa definim comanda ca o variabila. Astfel se vor atribui variabilei rezultatele operatiei. Vom folosi prima cale, deoarece nu asteptam raspuns de la baze de date. Comanda va arata astfel:
mysql_query($query);
Folosirea acestei forme a
comenzii este utila pentru ca repetam pur si simplu
aceiasi comanda iarasi si iarasi
fara a fi nevoie sa memoram altele. Tot ce avem de
facut este sa schimbam variabila.
Acum ne vom intoarce la baza de date cu adrese de contact, pe care am creat-o in subcapitolul anterior. Pentru a introduce primele informatii in baza de date:
Nume: Ionescu
Prenume: Gheorghe
Telefon: 021 3456789
Mobil: 0724 334455
Fax: 0264 567891
E-mail: ionescughe@personal.ro
Web: https://www.inext.ro
Toate acestea vor fi introduse cu o singura comanda:
$query = 'INSERT INTO contacts VALUES ('','Ionescu', 'Gheorghe', '0213456789', '0724334455', '0264567891', 'ionescughe@personal.ro', 'https://www.inext.ro')';
Mai intai, apare variabila $query careia ii atribuim o comanda. Urmatoarea parte, adica:
INSERT INTO contacts VALUES
este destul de usor de inteles. Ea spune PHP-ului sa insereze in tabel numita contacts valorile care urmeaza (scrise intre paranteze).
Acolo, intre paranteze, avem toate campurile de adaugat. Apar toate campurile in ordine si sunt inserate informatiile dintre ghilimele. Spre exemplu:
Ionescu
va fi inserat in al 2-lea camp, care, in aceasta tabela este campul
'nume' .
Nu am inserat nimic in primul camp din baza de date (id). Aceasta din cauza ca acest camp va fi un camp index, elementul unic de identificare. Fiecare inregistrare din baza de date va avea un unic ID. Din aceasta cauza, cand incarcam baza de date, vom pune ID pe 'Auto Increment'. Asta inseamna ca, ne-atribuindu-i nici o valoare, el va lua la fiecare inregistrare urmatoarea valoare din sir. Iar prima inregistrare va avea valoarea ID=1 .
Introducerea datelor din paginile HTML este aproape identica cu inserarea lor din script-uri PHP. Avantajul consta, insa, in faptul ca nu apare nevoia schimbarii script-ului pentru fiecare camp de introdus. In plus, putem permite 'vizitatorilor' sa introduca direct datele lor.
Iata mai jos cum arata o pagina HTML cu celule text pentru introducerea detaliilor corespunzatoare:
<form action='insert.php'
method='post'>
Nume Familie: <input type='text'
name='nume'/><br/>
Prenume: <input type='text' name='prenume'/><br/>
Telefon: <input
type='text' name='telefon'/><br/>
Mobil: <input
type='text' name='mobil'/><br/>
Fax: <input
type='text' name='fax'/><br/>
E-mail: <input
type='text' name='email'/><br/>
Web: <input
type='text' name='web'/><br/>
<input type='Submit'/>
</form>
Aceasta pagina poate fi, desigur, formatata si pot apare diferite schimbari - variante. Este doar un formular de pornire, ilustrativ. Va trebui insa editat script-ul din lectia precedenta, pentru ca, in locul introducerii informatiilor direct din script in baza de date, sa fie folosite variabilele:
<?
$username='username';
$password='password';
$database='baza_mea_de_date';
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( 'Baza de date nu poate fi
selectata');
$query = 'INSERT INTO contacts VALUES
('','$nume','$prenume','$telefon','$mobil','$fax','$email','$web')';
mysql_query($query);
mysql_close();
?>
Acest script trebuie salvat ca fisier cu numele insert.php, astfel ca sa poata fi apelat de formularul HTML. Treaba va merge intrucat, in loc ca datele sa fie introduse local, ele se introduc in formular si sunt memorate in variabilele care apar precizate acolo si care sunt transmise apoi PHP-ului.
Putem sa adaugam script-ului un mesaj care sa confirme preluarea datelor. Asta face parte din 'oferta' de baza a PHP si ramane ca exercitiu.
Acum avem in baza de date cel putin o inregistrare, daca nu mai multe. Se pune problema cum vizualizam, cum scoatem aceste date folosind PHP.
Prima comanda la care vom apela este comanda SELECT din SQL, folosita intr-o cerere MySQL in forma:
SELECT * FROM contacts
Aceasta este o comanda de baza din MySQL si orice baza de date in general, care va spune script-ului sa selecteze toate inregistrarile din tabela contacts. Dar, de data aceasta, comanda furnizeaza un rezultat, ea va trebui executata atribuind rezultatele unei variabile:
$query = 'SELECT
* FROM contacts';
$rezultat = mysql_query($query);
In acest caz, intregul continut al bazei de date va fi atribuit variabilei cu numele $rezultat (care va fi deci o matrice, un tablou). Mai inainte de a putea scoate aceste date va trebui sa le extragem ca variabile simple, separate. Pentru asta trebuie sa stim cate inregistrari avem in tabela (deci si in variabila $rezultat ).
Avem o comanda speciala in MySQL pentru calculul numarului de linii din tabela. Este importanta pentru ca in baza de date se fac uzual numeroase actualizari, completari, stergeri.
$num=mysql_numrows($rezultat);
Astfel, variabila $num va capata ca valoare numarul de linii din $rezultat (adica tocmai din baza de date). Acest numar va putea fi folosit in continuare pentru ciclul in care se vor analiza si desface in variable separate campurile fiecarei linii.
Avem de scris un ciclu pentru a selecta din tabel (din rezultat) linie cu linie. Definim un indice, o variabila $i care va parcurge (cu incrementare) valorile de la 1 la $num.
$i=0;
while ($i < $num)
Acesta este un ciclu tipic in PHP si va executa ansamblul numit OPERATIILE ASUPRA LINIEI de exact $num ori, adica de atatea ori cat trebuie. La fiecare reluare $i fiind marit cu o unitate. Astfel $i poate fi folosit si pentru a preciza numarul liniei care se prelucreaza.
In partea pe care am numit-o OPERATIILE ASUPRA LINIEI trebuie sa separam fiecare camp din linia - inregistrare asociindu-l unei variabile. Folosim pentru asta urmatoarea secventa:
$variable=mysql_result($rezultat,$i,'numele_campului');
Astfel, pentru a extrage
fiecare componenta din baza noastra de date, vom folosi urmatoarele
instructiuni:
$nume=mysql_result($result,$i,'nume');
$prenume=mysql_result($result,$i,'prenume');
$telefon=mysql_result($result,$i,'telefon');
$mobil=mysql_result($result,$i,'mobil');
$fax=mysql_result($result,$i,'fax');
$email=mysql_result($result,$i,'email');
$web=mysql_result($result,$i,'web');
Nu ne-am ocupat aici de campul
ID (desi o puteam face) pentru ca nu ne este necesar la afisare
datelor.
Acum putem scrie script-ul complet pentru scoaterea datelor. In acest script datele nu sunt formatate, adica vor fi afisate toate cu acelasi font, predefinit.
<?
$username='username';
$password='password';
$database='baza_noastra_de_date';
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( 'Baza de date nu poate fi selectata');
$query='SELECT * FROM contacts';
$rezultat=mysql_query($query);
$num=mysql_numrows($rezultat);
mysql_close();
echo '<b><center>Database
Output</center></b><br><br>';
$i=0;
while ($i < $num)
?>
Am scos o lista cu toate persoanele inregistrate in baza de date. De fapt am ajuns sa avem definite variabilele care permit scoaterea sau afisarea, incheind cu o comanda destul de simpla de afisare (echo) fara a o explica.
Desigur, datele din tabel ar trebui prezentate pe ecran tot in forma unui tabel. Iar acest lucru nu este prea complicat. In fond se rezuma la a sti sa afisezi (scoti) fiecare variabila in parte, urmand ca tot restul privind formatarea, organizarea ca tabel, etc., sa fie doar legat de cunoasterea HTML.
Tot ce avem de facut deci este sa folosim PHP pentru scoaterile HTML incluzand variabilele in zonele corecte. Cel mai simplu este sa inchidem tagul PHP si sa introducem liniile normale din HTML. Oridecate ori ajungem la o variabila o vom include folosind o secventa de forma:
<? echo '$numele_variabilei'; ?>
Putem atunci sa folosim un ciclu PHP pentru a repeta o secventa de cod ca cea de mai sus, la includerea variabilelor intr-un tablou. Spre exemplu, folosind secventa de cod din lectia precedenta cu ciclul corespunzator, putem formata scoaterile pentru ca sa apara intr-o tabela mare:
<table border='0'
cellspacing='2' cellpadding='2'>
<tr>
<th><font face='Arial, Helvetica,
sans-serif'>Nume</font></th>
<th><font face='Arial, Helvetica,
sans-serif'>Telefon</font></th>
<th><font face='Arial, Helvetica,
sans-serif'>Mobil</font></th>
<th><font face='Arial, Helvetica, sans-serif'>Fax</font></th>
<th><font face='Arial, Helvetica,
sans-serif'>E-mail</font></th>
<th><font face='Arial, Helvetica,
sans-serif'>Website</font></th>
</tr>
$i=0;
while ($i < $num)
echo '</table>';
Aceasta secventa va afisa antetul tabelului, apoi va adauga o linie suplimentara pentru fiecare inregistrare din baza de date, formatand datele la scoatere.
Daca sunteti deja familiarizati cu PHP si HTML, atunci lucrurile sunt probabil destul de clare - de usor de inteles. O sa explicam doar una din liniile din tabel, spre exemplu:
<a href='mailto:<? echo '$email'; ?>'>E-mail</a>
care construieste o legatura email la adresa transmisa de variabila $email . Asta arata una dintre calitatile importante si utile ale folosirii PHP pentru includerea datelor MySQL . Adica prin astfel de scoateri putem face paginile Web dinamice.
La fel cu afisarea intregii baze de date, PHP poate fi folosit pentru a selecta date individuale, doar anumite inregistrari, sau inregistrarile care verifica anumite criterii. Pentru asta trebuie sa folosim o variatiune a cererii SELECT . Pentru afisarea intregii tabele am folosit cererea:
SELECT * FROM contacts
Daca vrem insa sa selectam doar pe acele persoane care au prenumele 'Mihai' vom folosi o cerere de forma:
SELECT * FROM contacts WHERE prenume='mihai'
Ca si la alte cereri - comenzi SQL, avem de fapt propozitii foarte apropiate de formularea curenta din limba engleza. Intr-un mod asemanator vom putea selecta inregistrarile pe baza oricarui camp din baza de date. Dar se poate selecta o inregistrare folosind mai multe campuri, adaugand in formularea cererii clauza:
field='value'
Fara a intra in prea
multe detalii, vom mai spune ca putem folosi variabilele pentru a
transmite criteriul dorit pentru selectie. Spre exemplu, daca
dintr-un formular de cautare primim a variabila numita
$nume_cautat putem imagina urmatoarea secventa:
$query='SELECT * FROM contacts WHERE nume='$nume_cautat'';
$result=mysql_query($query);
Retineti ca la sfarsitul primei linii avem un '
urmat de ' , inainte de ; .
Prin scoaterea tuturor informatiilor dintr-o baza de date, este putin probabil sa ajungem la situatia cand nu mai sunt date. Dar daca am permis ajustari si, stergeri si actualizari ale inregistrarilor, atunci se prea poate sa ajungem la o eroare. Din fericire, cu PHP si MySQL, avem un mod simplu de a evita o astfel de situatie folosind:
$num=mysql_numrows($rezultat);
unde $rezultat contine rezultatul unei cereri - interogari a bazei de
date ( precum selectarea tuturor inregistrarilor).
Asa cum am discutat mai sus, aceasta va atribui variabilei $num numarul de linii din rezultat (care s-a utilizat intr-un ciclu, in lectia a 4-a). Putem insera in ciclu o comanda de captare/tratare a erorilor folosind o instructiune IF :
if ($num==0) else
Putem dezvolta ramura asta facand-o mai prietenoasa. Spre exemplu, oferind o legatura la pagina Add Data, de introducere de informatii in baza de date, atunci cand ea este vida.
Nu numai ca putem scoate datele in functie de continutul unui camp, dar putem ordona aceste date pe baza unei reguli aplicata continutului unei coloane (spre exemplu aranjand utilizatorii in ordine alfabetica). In mod normal, afisarea in urma unei interogari se face in ordinea stabilita de identificatorul ID, pornind de la 1 in sus. Putem insa alege modul de ordonare (sortarea) dupa oricare coloana din tabel.
Spre exemplu, o ordonare utila ar putea fi dupa numele de botez. Asta insemnand in ordine ascendenta (crescatoare, de la A la Z si de la 1 la 10). Pentru a obtine un astfel de rezultat folosim urmatoarea cerere:
SELECT * FROM contacts ORDER BY prenume ASC
Putem folosi, desigur si ordonarea descendenta, specificand DESC in locul lui ASC .
Valoarea care i se atribuie (ca mai sus) variabilei $num este foarte importanta, nu numai pentru cicluri si captarea erorilor. Un exemplu poate fi scoaterea doar a ultimelor 5 inregistrari adaugate bazei de date. Mai intai, avem ordonarea naturala, stabilita de ID, (ultima inregistrare avand valoarea maxima a ID), dar vom alege ordinea descendenta.
Astfel vom avea inregistrarile incepand cu cea mai recenta si terminand cu cea mai veche. Mai trebuie doar sa numaram, afisand doar primele 5.
Desigur, inainte de a incepe ciclul de cinci, trebuie sa ne asiguram ca $num este mai mare decat 5 . Avem deci o secventa de forma:
if ($num<5) else
$i=0;
while ($i < $to)
Cu alte cuvinte, daca
avem mai mult de cinci linii in tabel atunci ciclul se va face de la 0 la 5. In
caz contrar, daca sunt mai putin de 5 linii, ciclul va parcurge exact
numarul respectiv de linii.
Atunci cand am creat baza de date (cartea de adrese), am inclus un camp numeric numit id pe care l-am stabilit ca auto_increment si i-am dat rolul de camp primar. Am discutat cum acesta are rolul de identificator unic pentru fiecare inregistrare din baza de date. Acum facem un pas inainte, folosind acest camp pentru a selecta anumite inregistrari din baza de date.
Iata cum putem selecta inregistrari din baza de date folosind continutul unui camp particular:
SELECT * FROM contacts WHERE field='value'
Atunci, folosind unicitatea campului ID putem selecta orice inregistrare din baza de date, folosind:
SELECT * FROM contacts WHERE id='$id'
unde $id este o variabila continand numarul unei inregistrari. Spre exemplu, daca dorim sa avem o pagina Web generata dinamic dintr-o baza de date cu un singur script PHP, putem scrie script-ul ca sa includa pagini Web distincte ca inregistrari ale bazei de date.
Atunci, folosind campul id, putem selecta fiecare pagina individuala plasand-o la soatere. Putem chiar folosi chiar URL-ul paginii pentru a specifica inregistrarea dorita
https://www.centrul_propriu.ro/stiri/items.php?item=5476
iar script-ul PHP sa caute inregistrarea care are numarul de ordine
(id-ul) care corespunde valorii variabilei $item, care in acest caz este 5476
Folosind aceasta metoda de alegere a inregistrarii folosind URL-ul, inregistrarea poate fi extinsa prin generarea dinamica a URL-ului. Pare cam complicat. Vom vedea cum realizam o pagina de aducere la zi a bazei de date cu adresele. Cu ideea ca utilizatorul sa-si poata modifica propriile detalii din inregistrare.
Pentru asta, vom include o noua coloana cuprinzand o legatura Update . Aceasta legatura conducand la o pagina care sa permita utilizatorului sa actualizeze inregistrarea. Pentru a selecta inregistrarea din acea pagina vom pune:
?id=$id
Capatand
identificatorul id al inregistrarii, secventa aceasta va crea o
legatura la fiecare din inregistrari.
Am vazut cum creem o legatura pentru fiecare inregistrare pentru a ne pozitiona in scriptul de actualizare. Prin folosirea variabilei $id , legaturile respective pot transmite valoarea corecta a identificatorului ID catre script, astfel ca acesta sa poata actualiza baza de date.
Vom realiza deci un script de actualizare, care va avea doua parti:
Pagina de afisare a actualizarii
Prima parte a script-ului de actualizare foloseste procedeul de selectie a unei singure inregistrari, asa cum l-am scris in lectia precedenta, adaugand doar cateva elemente HTML pentru a-l face mai util. Mai intai, ne connectam la baza de date si selectam inregistrarea potrivita.
$id=$_GET['id'];
$username='nume_utilizator';
$password='parola';
$database='baza_de_date';
mysql_connect(localhost,$username,$password);
$query=' SELECT * FROM contacts WHERE id='$id'';
$result=mysql_query($query);
$num=mysql_numrows($rezultat);
mysql_close();
$i=0;
while ($i < $num)
'Zona de cod suplimentar' marcheaza portiunea din script unde vor apare comenzile de actualizare. Adica formatarea HTML pentru scoatere:
<form action='updated.php'
method='post'>
<input type='hidden' name='ud_id' value='<? echo
'$id'; ?>'>
Numele de Familie: <input type='text' value='ud_first'
value='<? echo '$nume'?>'><br>
Numele de Botez: <input type='text' value='ud_last'
value='<? echo '$prenume'?>'><br>
Numarul de Telefon: <input type='text'
value='ud_phone' value='<? echo
'$telefon'?>'><br>
Numarul de Mobil: <input type='text'
value='ud_mobile' value='<? echo
'$mobil'?>'><br>
Numarul de Fax: <input type='text' value='ud_fax'
value='<? echo '$fax'?>'><br>
Adresa E-mail: <input type='text' value='ud_email'
value='<? echo '$email'?>'><br>
Adresa Web: <input type='text' value='ud_web'
value='<? echo '$web'?>'><br>
<input type='Submit' value='Update'>
</form>
Asa cum se poate vedea, aceasta secventa construieste (scoate) un formular standard, dar in locul zonelor goale, asa cum apareau in formularul pentru introducerea datelor, de data asta avem continutul campului respectiv din inregistrarea in cauza (care-i de actualizat). Asta il face mai adaptat scopului, mai comod de folosit.
Actualizarea bazei de date
Tot ce mai avem de facut este actualizarea efectiva a bazei de date. Asta este o operatie simpla care implica o noua cerere pentru baza de date:
$query = 'UPDATE contacts SET nume = '$ud_first',prenume = '$ud_last',telefon = '$ud_phone',mobil = '$ud_mobile',fax = '$ud_fax',email = '$ud_email',web = '$ud_web' WHERE id = '$ud_id'';
Aceasta cerere spune sistemului de gestiune de baze de date sa actualizeze tabela contacts in acele linii in care ID coincide cu valoarea din $ud_id (care, asa cum se poate vedea din formularul anterior, a primit valoarea id a inregistrarii pe care o actualizam), modificand urmatoarele campuri cu valorile specificate (care au fost introduse cu ajutorul formularului).
Aceasta cerere poate fi inglobata intr-un script simplu:
$ud_id=$_POST['ud_id'];
$ud_first=$_POST['ud_first'];
$ud_last=$_POST['ud_last'];
$ud_phone=$_POST['ud_phone'];
$ud_mobile=$_POST['ud_mobile'];
$ud_fax=$_POST['ud_fax'];
$ud_email=$_POST['ud_email'];
$ud_web=$_POST['ud_web'];
$username='nume_utilizator';
$password='parola';
$database='baza_de_date';
mysql_connect(localhost,$username,$password);
$query='UPDATE contacts WHERE id='$ud_id' SET first='$ud_first'
last='$ud_last' phone='$ud_phone' mobile='$ud_mobile' fax='$ud_fax'
email='$ud_email' web='$ud_web'';
mysql_query($query);
echo 'Actualizarea s-a facut';
mysql_close();
Asta va actualiza baza de date transmitand si o confirmare utilizatorului.
Ultima parte a acestui capitol priveste modul cum stergem o inregistrare dim baza de date. Ca si cu pagina de actualizare, vom construi o pagina pentru a sterge una sau mai multe linii din baza de date. Trebuie sa-i transmitem pozitia (ID-ul) inregistrarii, printr-un URL, spre exemplu:
delete.php?id=9
Scriptul care va face asta,
numit delete.php, este aproape identic cu cel de actualizare a bazei de
date, cu exceptia comenzii MySQL (modului in care este construita
cererea). In locul comenzii SQL UPDATE , vom folosi:
DELETE FROM contacts WHERE id='$id'
La acest punct este momentul sa mentionam si un alt mod de folosire a ciclurilor cu o baza de date. Putem folosi un ciclu pentru a executa un sir de cereri. Spre exemplu, daca trebuie sa schimbam - extragem toate inregistrarile dintr-o baza de date in care apare ca prenume Serban pentru a realiza un Website www.serban.ro:
Partea Standard de Conectare la Baza de Date
$query=' SELECT * FROM contacts WHERE prenume='Serban'';
$rezultat=mysql_query($query);
$num=mysql_numrows($rezultat);
$i=0;
while ($i < $num)
mysql_close();
Pe parcursul acestui capitol am vazut cum sa folosim PHP-ul pentru a interactiona cu un sistem de baze de date MySQL (sau SQL) si cum sa folosim comenzile uzuale (cele mai necesare). Am exemplificat, cu modul de realizare a unei baze de date de tip carte de adrese (ca sistem de management a contactelor). In aceasta lectie finala, vom vedea cateva 'trucuri' MySQL si vom scrie versiunea definitiva (finala) a script-ului construit pe parcursul acestui curs.
Atunci cand construim un script complex folosind bazele de date, apare des secventa de conectare la baza de date. De aceea, pentru a simplifica lucrurile, se poate fie sa creem un fisier cu numele de utilizator si parola sau chiar un fisier de conectare. Spre exemplu, un fisier 'username/password' poate fi construit cu numele:
dbinfo.inc.php
cuprinzand in el:
<?
$username='numele_de_utilizator_al_bazei_de_date';
$password='parola';
$database='nume_baza_de_date';
?>
in care precizam datele concrete potrivite (numele_de_utilizator_al_bazei_de_date, parola, nume_baza_de_date). Atunci in fisierele php vom folosi, chiar la inceput, urmatoarea secventa, care va include scriptul de mai sus:
include('dbinfo.inc.php');
sau, atunci cand acesta se afla in alt director:
include('/[traseul complet]/dbinfo.inc.php');
Atunci, vom putea folosi in continuare variabilele $username, $password si $database in script-ul nostru, fara a avea nevoie sa le definim de fiecare data. De asemeni, daca vom modifica candva aceste informatii, spre exemplu trecand pe alt server web, tot ce va fi de schimbat va fi in acest unic fisier.
Aceeasi schema o putem folosi pentru conectarea la baza de date, plasand si comanda de conectare in fisier. Atunci va trebui, insa, sa ne asiguram de inchiderea conexiunii, pentru a nu avea probleme cu serverul MySQL.
Se poate realiza si o cautare limitata in baza de date folosind functia speciala din MySQL. Adica prin folosirea functiei LIKE , in forma:
SELECT * FROM nume_tabela WHERE nume_camp LIKE '%$string%'
Asta insemna ca LIKE va spune bazei de date sa foloseasca posibilitatile proprii de cautare. Semnele % au semnificatia ca orice alte date pot sa apara in pozitia lor si variabila $string va contine cererea de cautare. Adica putem avea acolo un cuvant, sau un numar, spre exemplu:
LIKE '%pian%'
ceea ce va conduce la scoaterea liniilor care includ cuvantul pian in
campul specificat.
Similar, putem renunta la unul din semnele % astfel ca sa precizam pozitia sirului de caractere:
LIKE 'pian%'
Astfel vom putea selecta doar liniile in care campul specificat incepe cu prefixul pian, caz in care, spre exemplu, expresia urmatoare va fi evitata:
Un pian se afla pe scena.
Copyright © 2024 - Toate drepturile rezervate