PRELUARE INFORMATII DIN BAZE DE DATE
Suportul pe care PHP il ofera referitor la bazele de date este o caracteristica importanta a limbajului; practic, exista suport pentru cele mai cunoscute servere de baze de date cunoscute in prezent, printre care enumeram: MySQL, ODBC, Oracle, PostgresSQL, Informix, InterBase, Dbase, si altele. In exemplele prezentate in continuare vom utiliza un server de baze de date MySQL; prin intermediul acestuia va fi ilustrata maniera generala de lucru a limbajului PHP cu baze de date.
Astfel, principalele functii puse la dispozitie de PHP pentru manipularea bazelor de date sunt:
int mysql_connect(string hostname [:port][:/cale_socket] [,string username][,string parola]) - functia realizeaza conexiunea catre un server de baze de date MySQL, pe baza (eventual) a unui nume de utilizator si parola.
int mysql_select_db(string nume_baza [, int link_id]) - dupa ce se realizeaza conectarea cu succes, functia realizeaza selectia unei anumite baze de date dorite, specificata prin nume. Cel de-al doilea parametru este folosit numai in cazul existentei de conexiuni multiple.
int mysql_close([link_id]) - inchide conexiunea catre serverul de baze de date MySQL.
int $mysqli->query(string query [, int link_id]) - transmite interogarea specificata prin parametru catre serverul de baze de date; functia NU returneaza rezultatul interogarii, ci un identificator al rezultatului interogarii. Alte functii trebuie utilizate in continuare pentru a obtine informatii despre rezultatul interogarii.
int mysql_result(int result_id, int row [, cimpuri]) - este folosita impreuna cu $mysqli->query, artunci cind o instructiune SELECT este implicata, pentru a produce un set de date. Parametrul result_id se refera la valoarea returnata de $mysqli->query.
int mysql_affected_rows([int link_id]) - este folosita pentru a returna numarul de rinduri afectate de o interogare care implica INSERT, UPDATE, REPLACE sau DELETE. Daca parametrul link_id nu este specificat, rezultatul de refera la ultimul link deschis.
int mysql_num_rows(int result) - determina numarul de rinduri returnat de o interogare SELECT. Parametrul result reprezinta identificatorul rezultatului interogarii.
array mysql_fetch_row(int result) asigneaza un intreg rind unui tablou indexat (incepind de la 0). De obicei se utilizeaza in combinatie cu functia list a tablourilor, cu ajutorul careia se pot asocia unor variabile elementele array-ului rezultat:
while (list($var1, $var2, ..)=mysql_fetch_row($result)):
//realizeaza prelucrari asupra variabilelor $var1, $var2, .
endwhile;
array mysql_fetch_array(int result [, tip_rezultat]) - produce acelasi rezultat ca si mysql_fetch_row, doar ca rezultatele sunt depuse intr-un tablou asociativ. De fapt, tip_rezultat indica tipul tabloului, daca este specificat: MYSQL_ASSOC, MYSQL_NUM, MYSQL_BOTH. Tabloul este indexat utilizind numele coloanelor din rindul returnat ca rezultat.
Un exemplu in cadrul caruia se afiseaza continutul unui tablou de persoane dintr-o baza de date folosind functiile de mai sus, este prezentat in fisierul quest_var8.php.
<html>
<?
include ('init_var8.inc')
?>
<head>
<title><? print '$titlu'; ?></title>
</head>
<body>
<?
$host='classic';
$baza_date='gianina';
$utilizator='gianina';
$parola_acces='gg';
//conexiunea catre baza de date
$leg=@mysql_connect($host,$utilizator,$parola_acces)
or die('Nu se poate stabili o conexiune la serverul
MySQL');
//selectia bazei de date
@mysql_select_db($baza_date)
or
die('Nu se poate selecta baza de date !');
print '<h3>Informatiile din
baza de date solicitata
sunt urmatoarele:<h3>';
afis_info(); //functie care afiseaza informatii
mysql_close(); //inchidere conexiune
?>
</body>
</html>
Se observa utilizarea fisierului init_var8.inc care este inclus in fisierul quest_var8.php utilizind functia include(). Astfel, pentru realizarea unei structuri modulare a script-urilor, precum si pentru a da posibilitatea de a crea biblioteci de cod (functii) care sa poata fi usor incluse in orice script PHP, exista definite urmatoarele functii:
include ('nume_fisier') - include un fisier
include_once('nume_fisier') - in plus, fata de functia anterioara, verifica daca fisierul a mai fost inclus; daca da, nu executa nimic
require('nume_fisier') - opereaza ca si include; singura deosebire este aceea ca includerea se realizeaza indiferent de eventualele conditii
require_once('nume_fisier') - verifica daca fisierul nu a mai fost inclus
Desi se obisnuieste ca fisierele de includere sa primeasca extensia .inc, acest lucru nu este insa obligatoriu. Daca fisierul de includere contine linii de program PHP, acesta trebuie sa includa marcatorii < ? respectiv ?> amplasati in locatiile corespunzatoare.
Astfel, fisierul init_var8.inc inclus mai sus, si care contine, printre alte definitii, si functia afis_info(), este urmatorul:
<?
$titlu='Tabel nominal';
$tabel_date='utilizatori';
$bg_color='white';
$font_color='red';
function afis_info()
endwhile;
print '</table>';
}
?>
Exemplul de mai sus presupune existenta tabelei numita utilizatori din baza de date doina ; crearea tabelei poate fi realizata cu urmatoarea comanda MySQL :
create table utilizatori
(nume varchar(15),
prenume varchar(15),
email varchar(20),
obs varchar(30)) ;
Un alt exemplu care utilizeaza baze de date il reprezinta implementarea unui proces de autentificare a utilizatorilor. Acestia se identifica printr-un nume de utilizator si o parola; atunci cind utilizatorul se inregistreaza (la primul acces), numele utilizatorului ales si parola sunt memorate intr-un tabel utilizatori (parola sub forma criptata, folosind algoritmul de criptare md5, pus la dispozitie de PHP prin intermediul functiei md5()). La urmatoarele intrari, utilizatorul este autentificat pe baza numelui si parolei stocate.
In plus, la crearea noilor utilizatori, se verifica daca numele dorit mai exista in tabel; in caz afirmativ, se cere introducerea unui alt nume de utilizator (trebuie sa fie unic!).
Fisierul care implementeaza procesul de autentificare este autentif.php:
<html>
<head>
<title>Autentificare cu parola</title>
</head>
<body>
<?php
function print_form()
//setare variabile baza date
$host='classic';
$baza_date='doina';
$tabel_date='aut_utiliz';
$utilizator='doina';
$parola_acces='doina';
//utilizatori existenti
if (isset($trimis)):
if(!$bd=mysql_connect($host,$utilizator,$parola_acces)):
print('Nu se poate realiza
conexiunea la baza de date!n');
else:
mysql_select_db($baza_date,$bd);
endif;
$sql='select * from $tabel_date
where nume='$nume_utiliz'';
$rez=$mysqli->query($sql);
$nr_linii=mysql_num_rows($rez);
if ($nr_linii==0): //verifica existenta
numelui utilizator
?>
<h3>Nume utilizator eronat!
</h3>
<?
print_form();
else:
$linie=mysql_fetch_array($rez);
// verifica parola introdusa
if
(md5($parola_utiliz)!=$linie['cript_pass']):
?>
<h3>Parola incorecta! </h3>
<?
print_form();
else:
?>
<h3>Parola
acceptata! </h3>
<?
endif;
endif;
else:
//utilizatori noi, trebuie inregistrati
if (isset($inreg)):
if(!$bd=mysql_connect($host,$utilizator,$parola_acces)):
print('Nu se poate realiza
conexiunea la baza de date!n');
else:
mysql_select_db($baza_date,$bd);
endif;
//se cripteaza parola
$parola_md5=md5($parola_utiliz);
$exista='select * from $tabel_date
where nume='$nume_utiliz'';
$rez=$mysqli->query($exista);
$nr_linii=mysql_num_rows($rez);
//daca nu mai exista utilizatorul
if ($nr_linii==0):
//acesta este inserat in tabela de
utilizatori
$sql='insert into $tabel_date values
(NULL,'$nume_utiliz','$parola_md5');';
$rez=$mysqli->query($sql);
if (!$rez):
?>
<h3>Eroare la introducerea
noului utilizator! </h3>
<?
print_form();
else:
?>
<h3>Utilizator inregistrat!
</h3>
<?
print_form();
endif;
else:
?>
<h3>Numele utilizator exista
deja! Introduceti un alt nume! </h3>
<?
print_form();
endif;
else:
print_form();
endif;
endif;
?>
</body>
</html>
Scriptul utilizeaza o tabela aut_utiliz pentru pastrarea informatiilor referitoare la numele si parola utilizatorilor care s-au inregistrat, care a fost creata cu urmatoarele carateristici
create table aut_utiliz
(id integer,
nume varchar(32),
cript_pass varchar(64),
primary key (id)) ;
Scriptul realizeaza doua lucruri distincte: inregistreaza utilizatori noi (ceea ce presupune introducerea unei noi inregistrari in tabela aut_utiliz in cazul in care utilizatorul nu mai exista deja) si autentifica utilizatorii existenti (ceea ce presupune o cautare in tabela aut_utiliz, si o verificare a parolei introduse).
In mod asemanator, se poate pastra o baza de date care sa contina date de identificare referitoare la utilizatorii care au accesat un anumit sit. Astfel, pagina de intrare a unui astfel de sit contine un cookie care este setat la prima vizita a utilizatorului respectiv. Daca cookie-ul nu este setat, utilizatorul este inregistrat intr-o tabela numita vizitatori, iar cookie-ul este setat in browser-ul clientului ; durata de viata a cookie-ului este stabilita de variabila timelimit. Dupa expirarea acestuia, o noua intrare a utilizatorului pe acelasi site, va fi inregistrata din nou.
<?
include ('initial.php');
if (!isset($nume_cookie)) : //cookie-ul nu este setat
setcookie($nume_cookie, $val_cookie,
time()+$timelimit);
record_user(); //inregistreaza accesul in tabela cu
vizitatori
endif;
//daca cookie-ul exista, nu se inregistreaza nimic in baza!
?>
<html>
<head>
<title>Un site vizitat!</title>
</head>
<body>
Bine ati venit pe acest site! <br><a
href='vizit.php'>Verificati numarul de vizitatori al acestui
site!</a>
</body>
</html>
Se observa includerea fisierului initial.php care contine definitii de variabile folosite precum si functiile record_user() respectiv most_recent_user()
<?php
//variabile de conectare baza date
$host='classic';
$user='doina';
$pswd='doina';
//baza de date
$baza_date='doina';
//tabela cu vizitatorii
$tabela_viz='vizitatori';
//conectare server MySQL
@mysql_connect($host, $user, $pswd) or
die('Nu se poate realiza conexiunea
la baza de date!');
//selectare baza date
@mysql_select_db($baza_date)
or die('Nu se poate selecta baza de
date $baza_date!');
$max_viz='7';
//variabile cookie
$nume_cookie='log_viz';
$val_cookie='1';
$timelimit=3600; //timpul dupa care
cookie-ul dispare
//dupa acest timp, la un nou acces se va realiza
// o noua
inregistrare in baza
//functie pentru inregistrare utilizatori in tabela vizitatori
//din baza
de date
function record_user()
//functie pentru extragerea si afisarea informatiilor din tabela
function most_recent_user()
?>
Tabela vizitatori a fost creata avind urmatoarea structura:
create table vizitatori
(browser varchar(20),
ip varchar(15),
host varchar(50),
time varchar(20)) ;
Functia record_user inregistraza un nou utilizator in tabela (informatii privind browser-ul clientului, adresa de ip, momentul accesului folosind variabilele de mediu $HTTP_USER_AGENT $REMOTE_ADDR') . Functia most_recent_user selecteaza afiseaza ultimii $max_viz vizitatori ai sit-ului; variabila $max_viz contine o valoare prestabilita, in cazul nostru7. Functia este apelata incadrul fisierului vizit.php, astfel:
<html>
<?
include ('initial.php');
?>
<head>
<title>Ultimii <?print $max_viz;?> vizitatori!</title>
</head>
<body>
<?php
print 'Ultimii $max_viz vizitatori care au accesat acest site sunt:';
most_recent_user();
?>
</body>
</html>
Un alt exemplu in cadrul caruia se utilizeaza baze de date il reprezinta crearea unui motor de cautare. In cadrul acestuia, cautarea unei anumite informatii poate fi realizata pe baza mai multor criterii de selectie. In exemplul de mai sus, se utilizeaza un tabel de clienti, creat cu urmatoarele caracteristici:
create table clienti
(client_id integer auto_increment not null,
nume varchar(15),
prenume varchar(15),
email varchar(30),
primary key (client_id)); //identificatorul clientului este cheie primara
Cautarea unui client se poate realiza dupa nume, prenume sau email, selectie care pate fi realizata pe baza unei liste de selectie (categorii). Daca clientul a fost gasit, atunci, pe linga informatiile corespunzatoare acestuia din tabela clienti, se mai afiseaza si toate comenzile pe care acesta le-a efetuat pina in momentul respectiv. Comezile sunt pastrate intr-o alta tabela, comenzi, relationata cu tabela clienti pe baza cimpului client_id. Astfel, structura tabelei comenzi este urmatoarea :
create table comenzi
(com_id integer auto_increment not null,
prod_id varchar(15),
cantitate integer,
id_client integer,
primary key (com_id)) ; //identificatorul comenzii este cheie primara
alter table comenzi add constraint che_leg
foreign key (id_client)references clienti (client_id) ;
//id client este cheie externa
Scriptul de mai jos nu prezinta si o parte pentru introducerea de date in aceste tabele ; el doar extrage date din cadrul celor doua tabele relationate astfel.
<?
$form =
'<form action='search.php' method='post'>
<input type='hidden' name='ascuns'
value='y'>
Cheie de cautare:<br>
<input type='text' name='cheie'
size='20' maxlength='20'
value=''><br>
Cautare dupa:<br>
<select name='categorie'>
<option value=''>Alegeti un criteriu de cautare dupa:
<option value='nume'>Numele clientului
<option value='prenume'>Prenumele clientului
<option value='email'>Email-ul clientului
</select><br>
<input type='submit' value='Cauta'>
</form>
';
// afiseaza form-ul daca inca nu a fost trimis
if ($ascuns != 'y') :
print $form;
else :
// connectare la serverul MySQL si
selectia bazei de date
@mysql_connect('classic',
'doina', 'doina')
or die('Nu se poate realiza conexiune la
serverul MySQL!');
@mysql_select_db('doina')
or
die('Nu se poate selecta baza de date!');
// executa interogarea functie de categoria
solicitata
$query = 'SELECT nume, prenume,
email, client_id FROM clienti
WHERE $categorie =
'$cheie'';
$result = $mysqli->query($query);
// Daca nu s-a gasit nimic, afiseaza
mesaj si reafiseaza form-ul
if (mysql_num_rows($result) == 0) :
print 'Din pacate nu a
fost gasita nici o inregistrare.
Incercati din nou!';
print $form;
// s-au gasit rezultate
else :
// formateaza si afiseaza
rezultatele interogarii
list($nume, $prenume, $email, $id) =
mysql_fetch_row($result);
print '<h3>Informatii
despre clienti:</h3>';
print
'<b>Numele:</b> $nume <br>';
print
'<b>Prenumele:</b> $prenume <br>';
print
'<b>Email:</b> <a
href='mailto:$email'>$email</a> <br>';
print '<b>Id
client:</b> $id <br>';
print '<h3>Istoric
comenzi:</h3>';
// interogare comenzi
$query = 'SELECT com_id,
prod_id cantitate FROM comenzi
WHERE id_client = '$id' ORDER BY cantitate
DESC';
$result = $mysqli->query($query);
print '<table border =
1>';
print
'<tr><th>ID comanda</th><th>ID
produs</th><th>Cantitate</th></tr>';
// formateaza si afiseaza
rezultatele interogarii
while (list($id_comanda,
$id_produs, $cant) =
mysql_fetch_row($result)) :
print
'<tr>';
print
'<td>$id_comanda</td><td>$id_produs</td><td>$cant</td>';
print
'</tr>';
endwhile;
print
'</table>';
endif;
endif;
?>
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |