IPRO - PC Magazine Romania, Februarie 2003 SOLUŢII PENTRU PROGRAMATORII ŞI DESIGNERII WEB Totul despre situri dinamice (II) Konstantin Klyagin
username: ace password: ace2 baza de date: acedb | Continuăm seria de articole despre crearea siturilor dinamice. În acest număr veţi găsi atât informaţii despre operaţiile asupra unei bazei de date, crearea tabelelor, adăugare, modificare şi ştergere de înregistrări, cât şi un exemplu de lucru cu o astfel de bază de date. Consider suficiente informaţiile date în articolul anterior, pentru a începe programarea unui sit serios. Iată ce vă propun. Sper că toţi aţi văzut filmul Ace Ventura: detectivul de animale domestice" cu Jim Carrey. Imaginaţi-vă acum cât de folositoare ar putea fi o bază de date pentru eroul principal de acolo. Mă rog, dacă Jim, cu mimica lui, putea lucra cu calculatoarele şi web-ul, evident.  Nu cred că există mulţi oameni care n-au auzit de populara combinaţie PHP+MySQL măcar o dată. Spunem PHP, subînţelegem MySQL". Acestea sunt două tehnologii care au multe în comun: amândouă se distribuie gratuit, cu sursele deschise sub licenţa GNU, având comunităţi de utilizatori extraordinar de mari şi de active. Datorită uşurinţei în instalare şi utilizare, această pereche de produse a cucerit o grămadă de dezvoltatori amatori, profesionişti precum şi nenumărate firme din întreaga lume. Elemente SQL Orice bază de date SQL este pusă în mişcare cu ajutorul limbajului special, numit SQL (Structured Query Language). Uşurinţa în folosire se poate compara cu cea de la Basic. Informaţiile în sisteme de acest gen se păstrează separate logic în tabele şi înregistrări. Tot ce ne trebuie sunt comenzile pentru crearea unei tabele, inserarea şi extragerea de informaţii din baza de date, comenzi folosite în programele noastre. Deci, avem: Crearea unei tabele CREATE TABLE <nume> (<numele câmpului 1> <tipul câmpului>, <numele> <tipul>, ...); Creează o tabelă în baza de date cu un nume dat. Fiecare tabelă conţine câmpuri pe care le numim cum vrem, pentru fiecare câmp putem alege unul dintre tipurile standard. Principalele tipuri standard sunt: INTEGER sau doar INT (numerele), CHAR (şiruri de caractere, lungimea trebuie dată obligatoriu în paranteze), TIMESTAMP (data şi ora) şi BLOB (pentru informaţii binare de dimensiuni mari). Exemplu: create table modele (nume char(60), bust int, talie int, coapse int); Inserare într-o tabelă INSERT INTO <numele tabelei> (<câmp1>, <câmp2>, ...) VALUES (<valoare 1>, <valoare 2>); Adăugarea unei înregistrări într-o tabelă se face respectând ordinea perechilor nume, valoare din etapa de creare. insert into modele ('Maria Popescu', 95, 60, 90); Căutare într-o tabelă SELECT <câmp1>, <câmp2>, ... FROM <tabelă1>, <tabelă2>, ... WHERE <condiţie>; Această comandă extrage înregistrări dintr-o tabelă sau mai multe care corespund condiţiei date. Dacă partea cu WHERE a fost omisă, se vor afişa toate înregistrările. Chiar dacă pare simplu, cu ajutorul acestei comenzii se pot face interogări foarte complexe, în care figurează multe tabele, condiţii şi relaţii. Câteva exemple: select nume from modele; Ne va întoarce toate înregistrările. select nume from modele where bust >= 95; Solicităm doar informaţii despre modele la care mărimea bustului este mai mare sau egală cu 95 cm. În mod normal, sintaxa completă a comenzilor de mai sus ocupă câteva pagini de text, şi am menţionat numai cele mai des întalnite şi simple cazuri. Apropo, ca orice operaţie cu baze de date, ele se pot proba din linie de comandă: $ mysql -u root -p<parola> Operaţii asupra bazei de date Dar gata - ne aşteaptă animalele dispărute şi proprietarii lor disperaţi. Începem cu schema bazei de date pentru proiect. Trebuie creat un loc separat pentru fiecare proiect. Pentru a evita ca programele şi utilizatorii din alte proiecte, găzduite pe acelaşi server SQL, să strice informaţiile celorlalţi, creăm utilizatori pentru fiecare proiect. mysql> create database acedb; mysql> grant all privileges on acedb.* to ace@localhost identified by ace2'; Cu ultima comandă am creat un utilizator ace cu parola ace2, care se poate conecta numai local. Încercările de conectare de la alte computere nu vor merge (se face pentru a spori securitatea). În loc de localhost se poate pune şi numele altui calculator sau chiar o mască care va lăsa numai host-urile potrivite să acceseze baza de date. Putem folosi şi următorul mod de acordare a drepturilor: baza de date se află pe un calculator, iar serverul web se instalează pe un altul sau mai multe în aceeaşi reţea. Astfel se dobândeşte productivitatea bună în cazul unor sisteme foarte încărcate, cu multe solicitări. Conectarea la BD Ieşim din clientul MySQL (Ctrl-C, Ctrl-D sau exit") şi ne conectăm din nou, de data asta cu userul ace" şi mergem direct în baza noastră de date: $ mysql -u ace -pace2 acedb Definire tabele Avem nevoie de două tabele pentru proiect, de animale şi respectiv de proprietari. Acestea se definesc astfel: mysql> create table pets (id int auto_increment primary key, name char(60), marks char(255), lostdate date, reward int, owner_id int, picture blob); mysql> create table owners (id int auto_increment primary key, name char(60), address char(255), phone char(40), picture blob); Cuvintele noi aici sunt auto_increment" şi primary key". Primele două garantează unicitatea înregistrărilor acolo unde este necesar. Într-adevăr, ar fi bine să putem identifica atât animalele cât şi proprietarii lor în mod unic. Deci, auto_increment" face valoarea unui câmp să crească de fiecare dată când se adaugă o înregistrare, iar primary key" spune că nu pot fi două sau mai multe înregistrări cu acelaşi număr id. Întreg proiectul, gata pentru instalare şi utilizare îl găsiţi pe CD şi pe sit la adresa http://konst.org.ua/ace/. Arhiva include următoarele fişiere: ace.sql Script-ul pentru crearea bazei de date cu toate tabelele, cu ajutorul căruia baza de date poate fi reconstruită imediat. Scriptul se execută astfel: $ mysql -u root < ace.sql pets.php owners.php Acestea sunt script-urile care arată listele de proprietari şi animale. petadd.php owneradd.php Aici avem două script-uri care adaugă sau modifică (în funcţie de parametrii daţi) înregistrarea pentru un animal sau un proprietar în baza de date. Mai jos veţi putea afla cum se face încărcarea imaginilor prin formulare web. petdetails.php ownerdetails.php Afişează detaliile despre un animal sau proprietar, inclusiv fotografia, dacă aceasta există. Ultima acţiune se face cu ajutorul script-ului fetchimage.php. connect.php Acesta nu se execută niciodată separat, dar se include în fiecare script cu ajutorul comenzii require". Dacă ne uităm la alte script-uri, la începutul fiecăruia dintre ele găsim require connect.php". El face conectarea cu baza de date, şi defineşte câteva funcţii utile, pe care le vom folosi apoi în sit. fetchimage.php Extrage imaginea unui animal sau a unui proprietar din baza de date, şi o trimite spre afişare. Imaginea este afişată în interiorul tag-ului <IMG>. remove.php Şterge înregistrările despre proprietari sau animale din baza de date, în funcţie de opţiunea vizitatorului preluată printr-un formular online. După ştergere scriptul afişează din nou lista. Toate .php-urile acestea împreună cu directorul images/ se copiază într-un director vizibil pentru server-ul vostru de web. Aş recomanda să le puneţi în public_html/ace. Aici e bine să faceţi un link simbolic către index.php de la pets.php sau owners.php în funcţie de lista pe care vreţi să o vedeţi atunci când intraţi pe sit. Numele fişierului afişat implicit se specifică în fişierul de configurare al serverului de web, în exemplul nostru, Apache. Deci, facem un link: ln -sf pets.php index.php După aceea URL-ul va fi http://localhost/~contulvostru/ace/ şi dacă totul este setat corect, va merge imediat. Dacă nu, puteţi vedea proiectul la adresa http://konst.org.ua/ace/ Reţineţi că acest exemplu funcţionează doar atunci când parametrii file_uploads", short_open_tags" şi register_globals" sunt setaţi on". Aceasta se poate face atât din fişierul de configurare /etc/php.ini cât şi din configurarea Apache-ului. Pentru mai multe informaţii vedeţi manualele respective. În următorul articol vă voi explica cum merg script-urile din exemplu, cum se conectează la baza de date din PHP, precum şi crearea şi completarea formularelor online. Pe curând!
|