www.Hacking-Romania.com
Hacking, gaby hacker team, programe hack, radmin hack, hi5 hack, hack the west, hacking romania, hacking stuff, hacking tools, 1 hack, 1st hacks, 2 hack, 2 hacks, 3 hack, 3 hacks, 3000 hack, 3004 hack, 4 hack, 4 hacks, 55 hack, 6 hack, 6 hacks, 7 hack, 7 hacks, 9 hack, 9dragons hack, a hack, adventure quest hack, aim hack, alz hack, and hacks, best hack, blue hack, bots hack, bots hacks, buy hack, cabal online hack, chaos hacks, cheat engine hack, cheat hack, cheats and hacks, cheats hacks, city hack, club hack, combo hack, conquer hacks, conquer online hack, conquer online hacks, conquer speed hack, conquiztador hack, counter strike 1.6 hack, damage hack, de hack, download hack, download hack for, dragonfable hack, dragonfable hacks, drakkarious hack, exp hack, flyff hack, free hack, free hacks, game hack, game hacks, garena exp hack, gladiatus hack, gm hack, gold hack, gunz hack, hack, hack 5, hack a pc, hack a site, hack a website, hack blog, hack conquer, hack counter strike, hack crack, hack cs, hack cs 1.6, hack dvd, hack email, hack forum, hack hunter, hack id, hack info, hack it, hack mess, hack muonline, hack net, hack password, hack passwords, hack pc, hack pdf, hack programs, hack site, hack sites, hack soft, hack software, hack team, hack the game, hack this, hack website, hack windows xp, hack world, hack xp, hacked, hacking, hacking game, hacking programs, hacking software, hacking tutorials, hacks, how hack, how to hack, icon hack, last chaos hack, last chaos hacks, life hack, lineage 2 hack, lineage 2 hacks, linux hack, lvl hack, maplestory hacks, mobile hack, multi hack 3.0, mybrute hack, naruto arena hack, naruto arena hacks, one hit kill hack, online hacks, perfect world hacks, pool hack, programe hack, resolution hack, resource hack, roll hack, royal hack, silkroad hack, source hack, speed hack, speed hacks, super hack, the west hack, warrock hack, warrock hacks, web hack, xpango hack, lockerz forum
Lista Forumurilor Pe Tematici
www.Hacking-Romania.com | Reguli | Inregistrare | Login

POZE WWW.HACKING-ROMANIA.COM

Nu sunteti logat.
Nou pe simpatie:
Tanya321 pe Simpatie.ro
Femeie
19 ani
Giurgiu
cauta Barbat
27 - 63 ani
www.Hacking-Romania.com / Tutoriale Hack RO / Acces usor la SQL prin clase  
Autor
Mesaj Pagini: 1
mysticgohan
Pe lista neagra

Inregistrat: acum 16 ani
Postari: 1084
In incercarea noastra de a scrie cat mai putin cod pentru aceleasi lucruri, ne aplecam destul de des asupra problemei query-urilor catre baza de date. Avem cateva tipuri de query-uri pe care le repetam de fiecare data cand vrem ceva din baza de date. Poate ca unii dintre voi au deja cateva functii standard prin care isi fac treaba cu SQL-ul. Si mai multi insa prefera framework-uri consacrate, cum ar fi PEAR:B in combinatia uluitoare si flexibila cu DB::FormBuilder. Daca insa sunteti printre cei care nu vor o solutie atat de complicata, dar totusi, zic eu, fiabila, stati cu mine.

PEAR:B si FB au dezavantajele lor, printre care viteza redusa, numarul mare de variabile si parsari ale FB. Despre probleme ca acestea, si in special cea a parsarii template-urilor, vom discuta cu alta ocazie. Ceea ce intereseaza acum este o clasa care ne va oferi acces usor la baza noastra de date. Vom denumi clasa noastra DBFrame. Ea este un exemplu real de lucru si este deja folosita in dezvoltarea LifeCMS.

Am furat o idee de la PEAR:B. Fiecare baza de date va fi instantiata intr-un obiect al clasei noastre (nu fiecare tabel, ca in PEAR). Astfel, vom putea lucra cu baze multiple, daca este nevoie.

Prima functie de care ne vom ocupa este constructorul clasei, cel care va realiza conexiunea cu baza de date. Cu siguranta, codul va este cunoscut:


class DBFrame{

function __construct($host,$user,$pass,$database)
$con = mysql_connect($host,$user,$pass)
or die("Conectare nereusita:".mysql_error());

$db = mysql_select_db("$database", $con)
or die("Nu pot selecta baza de date ".$database.":".mysql_error());
}


Vom instantia bazele de date folosind urmatoarea linie. Trebuie sa aveti grija insa ca liniile de instantiere sa fie scrise intr-un fisier sigur, pentru ca vor contine datele de conectare la baza.


$baza_de_date1 = new DBFrame("localhost","user","parola","tabel1";


Dupa ce ne-am conectat, urmeaza sa scriem o functie care sa execute variatele query-uri de care vom avea nevoie.


function execute_query($q){
$handle=mysql_query($q);
return $handle;
}


Aceasta functie nu face decat sa execute query-ul primit si sa ii intoarca rezultatul brut. Pentru a putea folosi insa datele intoarse va trebui sa le formatam intr-un fel. De aceea, mai avem nevoie de inca o functie.


function query($q){
$result=$this->execute_query($q);
$ret=Array();
while($ret[]=mysql_fetch_assoc($result));
array_pop($ret);
return $ret;
}


Functia query() foloseste execute_query(), prima functie pe care am creat-o, pentru a obtine un handle pentru query-ul primit, si apoi formateaza datele in array-ul $ret, pe care il intoarce. Linia array_pop($ret); este necesara, deoarece functia mysql_fetch_assoc() intoarce intotdeauna un camp gol in plus, la sfarsitul array-ului.

Ce putem realiza pana acum? Putem instantia foarte usor mai multe baze de date si putem executa query-uri pe ele printr-o singura linie:


$baza_de_date=new DBFrame("localhost","user","parola","tabel";
$tabel=$baza_de_date->query("SELECT * FROM tabel";


Putem simplifica query-urile si mai mult. Putem scrie o functie care sa execute query-uri de tip SELECT, alta care sa faca numai DELETE, EMPTY sau DROP, alta pentru INSERT etc. Dintre toate, cea din urma pare cea mai cu probleme. Sa vedem cum facem usor un insert cu mica noastra DBFrame.

in primul rand, este de observat ca, in afara de SELECT, nici un tip de query nu intoarce nimic. in scrierea functiei pentru SELECT vom utiliza functia query(), pentru ca ea intoarce datele formatat. Pentru INSERT si toate celelalte vom folosi execute_query(), pentru ca este mai rapida, in cazul in care nu avem nevoie de datele returnate. Si, in plus, nu va mai da eroare. Sunteti liberi sa incercati

Sa ne gandim la inserarea in baza de date. De obicei, este nevoie de asa ceva atunci cand exista un form de inserare a datelor in baza. Aproape toate insert-urile de pe web au un front-end, care este aproape intotdeauna un form. Atunci vom construi functia noastra de insert direct adapdata la un form.

M-am gandit ca nu as vrea sa scriu o functie separata pentru UPDATE, asa ca o sa punem cateva conditii in plus si ne vom face functia sa updateze automat. De fapt, aproape automat: vom include in formular un camp ascuns in care vom stoca primary key. Daca acesta este gol, inseamna ca se va face insert. Daca nu, atunci inseamna ca userul a folosit butonul de edit si atunci facem update. Si deci functia:


function insert($table_name,$values,$primary='id'){
if(!empty($values[$primary]) && isset($values[$primary])) $q="UPDATE ".$table_name." SET ";
else $q="INSERT INTO ".$table_name." SET ";
foreach($values as $key=>$value)
if($key!=$primary) $q.=$key.'="'.$value.'",';
$q=substr($q,0,-1); // scoate virgula in plus de la ultima iterare a lui foreach
if(!empty($values[$primary]) && isset($values[$primary])) $q.=' WHERE '.$primary.'="'.$value.'"';
$this->execute_query($q);
}


Dupa cum am spus, intai stabilim daca este vorba de un INSERT sau un UPDATE si apoi cream query-ul, conform valorilor din arrayul $values. Ceilalti parametrii sunt $table_name pentru numele tabelului pe care se va executa query-ul si $primary pentru primary key, in caz ca aceasta nu are ca nume obisnuitul "id". La sfarsitul query-ului adaugam o clauza WHERE in cazul in care exista "id" si apoi executam query-ul folosind execute_query(), deoarece nu avem nevoie de rezultat.

Acum ramane de vazut cum vom construi formularul. Fiecare camp va trebui sa poarte numele asociat din baza de date. De ce? Pentru a nu ne complica. Daca facem asta, tot ce trebuie sa-i servim functiei noastre insert() va fi $_POST. Desigur, $_POST va contine si butonul de submit, dar problema se poate rezolva simplu:


if(isset($_POST['submit'])){
array_pop($_POST);
insert('tabel',$_POST);
}


Daca este vorba de un edit, scriptul ar trebui sa stie. Pentru asta, nu trebuie decat sa introducem campul cu numele primary key-ului din tabel si sa-i atribuim o valoare, de obicei din $_GET:


<input type="hidden" name="id" value="<?=$_GET['tabel_id']?>" />


pus acum 16 ani
   
Pagini: 1  

Mergi la