Creeaza.com - informatii profesionale despre


Simplitatea lucrurilor complicate - Referate profesionale unice
Acasa » scoala » informatica » baze de date
Preluare informatii din baze de date

Preluare informatii din baze de date


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


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.