Chip Special 22003

Embed Size (px)

Citation preview

  • 5/12/2018 Chip Special 22003

    1/68

    - Nr. 2 - 2003 - 100.000 lei -

    . - - - . . . . c u r i t a t eCele m ai buneTIP~nTRIC~

    Apache 1.3.27 ~i 2.0.44, PHP 4.3.1, MySQL 3.23 pentru Windows ~i Linux; Browsere : Opera 7.03,Mozilla 1.2.1; Scrip tu r i comple te : PhpBB 2.0.4, phpMyAdmin, phpAdsNew, Gallery, PHPOpenChat,MyPhpMoney; Edltoare PHP ,I HTM L: PhpEdit, Programmer Studio, Quanta, EditPlus, conTextMySQL GUI: MySQLFront 2.5, SQLyog, JSoft Security Manager for mySQL, myFrontEndAccele ra to a re PHP: Turck MMCache for PHP, PHP Accelerator; C lie n ti FTP: FlashFXP, BulletProof FTP

  • 5/12/2018 Chip Special 22003

    2/68

  • 5/12/2018 Chip Special 22003

    3/68

    Oana [email protected]

    ) } M y S Q L

    Java, unul se ivea eel mai des: PHP.PHP este un limbaj server-side care

    poate, printre altele, sa interactioneze cuo baza de date pentru a afisa sau a modi-fica informatiile din ea. Server-sideinseamna ca ruleaza si face cereri catrebaza de date la server care la randul lui"serve~te" paginile HTML rezultate.Astfel, clientul nu are nevoie de plugin-uri, programe aditionale sau setari spe-ciale 'm browser pentru a vedea rezulta-tul, pagina HTML creata cu ajutorul PHP.Acest Special se adreseaza celor care

    au ajuns intr-un impas asemanator; carevor sa invete mai mult sau pur ~is implusa-si faca viata de web designer maiusoara.Trebuie sa aveti cunostinte minime de

    HTML si acces la un server cu PHP siMySQL (acesta poate fi si ca1culatorulpersonal pe care sa instalaticele.necesarede pe CD-ul alitturat urmand.pas cu pasindicatiile prezentate in capitolul Insta-lare), Nu este necesar sa aveti ounostintepreliminare de baze de date sau progra-mare. Singura cerinta estesa exersati sisa aplicati chiar voi toate exempleleprezentate aici. De multe ori, un rezu1tatconcret va poate lamuri mai bine decatun paragraf descriptiv.Crearea de site-uri! folosind PHP ~i

    baze de date este ~ul din oele mai bunelucruri pe care le-ati putea invata. Soci-etatea evolueaza, Intemetul la fel si, con-form ultimei statistici vazute de mine, pepiata locurllor de munca, HTML-ul e Incadere libera in timp ce limbajele server-side sunt din ce , in ce mai cerute. PHPpoate fi doar inceputul pentru voi,notiunile invatate in'acest CHIP Specialleputeti considera ca un punct deplecarein invatarea chiar a limbajelor "serioase"pre cum Java sau C++. Cea mai marerealizare va fi Insa eliminarea rutinei simicsorarea timpului de lucru pe care 11Yeti acorda oricarui proiect, oricat decomplex sau de simplu.

    Mai repede,mal u~orIn ziua in care mi s-a dat de facut un

    site de prezentare de produse, site care laun calcui preliminar urma sa contina numai putin de 500 de pagini si peste 2000de poze, am stiut ca trebuie sa existe 0alternativa pentru 0 astfel de munca sisi-fica. La urma urmelor, mi-am zis, doarYahoo si Amazon nu au angajat mii deoameni pentru a face zilnic modificarilenecesare pe paginile lor, nu? Ca sa ada-ugi sau sa modifici 0 pagina a unui sitetrebuie s-o descarci de pe server, sa aplicimodificarile, sa gasesti si celelalte paginicare ar avea de suferit de pe urma schim-barii linkurilor si referintelor si sa aplicisi la acestea modificarile de rigoare, iarapoi sa urci totul inapoi pe server ...Perspectiva unui site cu 500 de paginiactualizat in acest mod, in fie care zi asaptamanii m-a facut sa vad negru in fataochilor chiar dinainte de a rna apuca delucru. Ulterior am aflat ca beneficiarulsite-ului pe care urma sa 11fac dorea sa-si poata vinde produsele on-line, sa tinalegatura cu cumparatorii prin intermedi-ul site-ului si sa aiba 0 evidenta a van-zarilor, stocurilor si clientilor site-uluiactualizata la cerere. Stiarn o i l . daca ar fifost sa fac site-ul HTML, beneficiaruluii-ar fi trebuit un intreg departament pen-tru a putea face fata cerintelor.Am aflat de bazele de date si limbajeleserver-side intreband in stanga siindreapta

    care ar fi fost solutia pentru problemamea. 0idee vaga despre ce insearrma 0baza de date aveam deja, stiam ca avand 0serie de informatii similare lepot organizain format tabelar, ca intr-o foaie de lucruExcel, pentru a putea gasi, sorta si prelu-era datele mai rapid. Dar nu stiam cum sepoate lega 0baza de date de 0pagina web,altfel decat salvarea in format HTML,solutie care mi separea inacceptabila, as fiajuns inapoi de unde plecasem, la down-load, modificat HTML, upload. Am in-trebat din nou si din multitudinea -deraspunsuri enigmatice ca Perl, ASP sau

    CH IP SPEC IA L - S ITE D INA MIC. .

    mailto:[email protected]:[email protected]
  • 5/12/2018 Chip Special 22003

    4/68

    CUPRINS3 Editorial6 IntroducereDezvoltarea Internetului este in al treilea stadiu de dezvoltare,iar .dinarnic" sl .interactiv" sunt atributele esentiale ale oricaruisite de succes.- PHP ~i MySQL sunt uneltele ideale pentru unsite dinamic.7 Cei trei magnificiSfaturi pentru 0 instalare rapida a uneltelor necesare pentruconstructia unui site folosind.

    9 Cu creionul pe hartleStabilirea obiectivelor.

    11 SQL-ul meu si-al tauBaza de date este coloana vertebrata a unui site dinamic. inacest capitol Yeti tnvata tot ce aveti nevoie sa ~titi pentru aconstrui ~i a lucra cu 0 baza de date.

    20 Programare pentru totlIntroducere in limbajul PHP.Interactivitate folosind PHP in combinatie cu formularele HTML, ,Invatati cum sa folositi PHP sl MySQL pentru a inducedinamism in paginile durnneavoastra.

    36 Noul site pas cu pasCreati primele pagini dinamice ~i interactive ale site-ului.

    51 Stapanul datelorSectiunea de administrare a site-ului.

    65 Tips & TricksCum sa va protejati de neplaceri.

    C H I P S P E C I A L - S I T E D IN A M IC

  • 5/12/2018 Chip Special 22003

    5/68

    Solulia cornpleta ...Sub acest moto am reunit pe CD 0colectie a celor mai bune aplicatiipentru crearea unui site web dinamic, in mare parte absolut gratuite.

    Uneltele de bazaBineinteles, crearea unui site perfor-

    mant, aici intelegand unul dinamic, pre-cum si punerea lui infunctiune, nu poatefi facuta rara anumite programe, dedi-cate. Din acest motiv, pe CD am inclusserverul web Apache, sistemul de bazede date MySQL si PHP.BrowserePentru testarea paginilor pe care Ie

    yeti face este clar nevoie de un browser.Acesta a fost si unul din motivele pentrucare am inclus pe CD ultimele versiuni adoua browsere consacrate: Mozilla siOpera.~ . ~ . - ~ - ~ - - ~ - - ~ ~ ~ - ~ ~ - - - - - - - - - - - - - - - - - [ -.... " 1: * / ' J l l l I a 0 . . , : :

    . . . . _ ,. .. _ _ . -. . . . . .-_-. . . . . . . . . . _ .. _ - -_ . . . . . . . . . . . _ .. . ..__ . . . ._ . _ . _ .. .-. . . . _ , . . , . _ _ _"' . . . . . . . . . . . .- . . , - , - . . . . . - " ' ,-~.-.-.. (. . . . _ . . . . .~;;!::-:::-::=-:::!",=.. =::'~ __ N

    ......_"""_ ...""1>_ .."."~"_ .._- , . .. .. -,>;1 .. -

    ExtrasCe ar insemna crearea/programarea

    unui site web rara ajutorul micilor pro-gramele care salveaza timp? 0munca deluni de zile. De aceea, pe CD Yeti gasinumeroase astfel de utilitare: clienti vi-zuali pentru conectarea si lucrul cu bazade date, editoare PHP, drivere MySQLpentru conectarea din .Net, Java si Py-thon.

    MacromediaNu este designer web care sa nu fi

    auzit de firma Macromedia si produselesale. Acestea usureaza foarte mult mun-ca de creare, programare si finalizare aunui site web, datorita unor unelte caHomesite, Flahsh MX, Dreamweaver,ca sa amintim numai cateva din versiu-nile de proba inc1use pe CD-ul atasatrevistei. FolosindHomesite 5 sauDream-weaver MX, crearea de site-uri web di-namice va fi mai usoara deoarece aman-doua ofera tag-tips si autocomplete pentruHTML si PHP.

    Clienti FTPDupa realizarea si testarea site-ului

    vine si momentul in care acesta trebuietransferat pe un server conectat la Inter-net. Pe CD Yeti gasi cei mai populariclienti de FTP cu care Yeti putea realizatransferul rapid si usor.

    Scripturi completeAm inclus si 0 serie de scripturi com-

    plete, gratuite, pe care Ie puteti utilizapentru a va imbogati site-ul. Printre celemai importante se numara PhpBB 2.0.4,un forum pe care trebuie doar sa Ilconfigurati pentru a inchega 0 comuni-tate pe site-ul dvs., phpMyAdmin, 0

    unealta cu ajutorul careia vaputeti conectala baza de date de oriunde ati fi, Gallery,cu care va puteti pune pozele online,phpMyChat, un sistem de chat web-based, precum si multe altele.

    Ajutor in caz de nevoiePe CD pe langa Apache 1.3.27 si

    2.0.44, PHP 4.3.1 siMySQL 3.23 pentruWindows si Linux Yetigasi si manualelePHP siMySQL in format HTML si CHM(Windows Help).

    '&CD-ul inclus poate fi utilizat In eonfonni-tate eu parametrii definiti in standardul Philips- Yellow Book. Edi tura nu-si asuma respons-abi litatea asupra eventualelor pagube provo-cate de utilizarea Clf-ului'in alii parametri deditcei stabiliti in standardul mentionat anterior.NOT A, I nterfata 9 R - uceputa sa t t tsuporta miniadancirne a cui D e a ce ea , nu este 'recomandata folosirea aceste.1aintr-url mediu cenu ofera minimul necesar! Interfata poate firulata atat sub Windows 95/98/Me, cat si subWindows NT/20001XP.Din cauza multitudinii de configuratii,

    redactia CHIP Special nu i~ipoate asuma nici 0responsabilitate ill eventualitatea ill care aparprobleme In function\\rea interfetei si aaplicatiilor.Prq.gra,mele

  • 5/12/2018 Chip Special 22003

    6/68

    Intoducere

    incotrone Indreptam?Dezvoltarea Internetului este in al treilea stadiu de dezvoltare, iar"dinamic" ~i "interactiv" sunt atributele esentiale ale oricarui sitede succes.-In1960, cand a fost lansat ARPANET,reteaua Ministerului Apararii al SUA,nimeni nu si-ar fi imaginat unde se vaajunge doar 40 de ani mai tarziu. Dezvol-tarea Intemetului a inceput cu adevarat in1993, odata cu lansarea primului browsergratui t, Mosaic, care putea afisa text si ima-gini. In mai putin de un an, numarul utilizato-rilor a ajuns la 2 milioane. David Siegel,autorul cartii "Creating killer websites" serefera la si te-urile create ill aceasta perio-ada ca "Site-uri de prima generatie", linea-re, limitate ca posibilitati dar indeajuns defunctionale pentru transmiterea informatiei.

    !]..Articolele prezente pe amandoua pagi-nile au fost introduse 0 singura data is-au aranjat "singure": cele mai noi lainceput, cele mai vechi la sfarit.A doua generatie a inceput odata cu

    specificat iile pentru HTML 1 si competi tiaNetscape- Microsoft pentru dorninarea pietei ,Orientarea in aceasta perioada a fost inspre.vizual" ca mod de comunicare.In prezent ne aflam in a treia generatie,a dinamismului si interactivitatii. Lumeaprogreseaza in pas rapid iar web designeriitrebuie sa tina pasul, ill aceasta meserieevolutia este cuvant cheie.Numarul internautilor creste de la 0 zi la

    alta, la fel ca si asteptarile lor: ei dorescinformatie proaspata si posibilitatea de ainteractiona. Paginile statice nu mai sunt deajuns pentru a asigura fidelizarea utilizato-rilor. In plus, in ziua de astazi oricine poateface un si te cu ajutorul aplicati ilor vizualeprecum Macromedia Dreamweaver sauMicrosoft Frontpage. Pentru a sta 'in fataconcurentei, un web designer trebuie saof ere mai mult si mai rapid decat ceilalti,C HIP SPEC IA L - S IT E D IN AM IC

    Intr-o statist ica fi icuta pe ejobs.com, cere-rea de programatori HTML este in caderelibera in timp ce limbajele server-side suntcele mai cerute. Ca webdesigneri, ori neadaptam noilor cerintei ori ingrosam coadala Oficiul forte lor de munca,Se cere ...In prezent aproape jumatate de miliard din

    populatia globului are acces la Internet. In2002 39,7% din utilizatorii de Internet aufacut cumparaturi cu 0valoare totala estimatala 47,98 miliarde de dolari. Site-urile careofera produse sau servicii sunt intr-o continuacrestere, Utilizatorii tind sa prefere cumpara-turile online datorita comoditatii de a coman-da un produs lara efort sau deplasare. Aproxi-mativ 98% din e-cumparatori spun caintentioneaza sa cumpere online ~i in vii tordatorita usurintei si comoditatii , Un studiu alCyberatlas releva faptul ca vanzarile onlineau eel mai mare potential de dezvoltare dinintreg sectorul economic. Site-urile firrnelornu mai sunt doar informative ci ofera utiliza-torului posibi litatea de a comanda produsesau servicii. La fel si site-urile care of erastiri: ele nu mai sunt demult doar simplepagini de ziar in format electronic, ci of erautilizatorului posibilitatea de a interactiona,de a-si personaliza experienta online. Dina-mismul si interactivitatea sunt elementeobligatori i pentru un site de succes.

    AvantajePrincipalul avantaj al unui site dinamic

    asupra unuia stat ic este usurinta in adrnini-strare. Adaugarea sau modificareacontinutului este floare la ureche si atat desimplu incat puteti delega pe oricine sa seocupe de aceasta sarcina. Deoarececontinutul este stocat in baza de date sau illfisiere text, cei care se ocupa de continut nuau nevoie sa stie vreun pic de HTML sauorganizarea sau layoutul paginilor.De asemenea, daca trebuie sa schimbati

    logo-ul pe fiecare pagina a site-ului este deajuns sa faceti modificarea intr-un singurfisier in loc sa luati fiecare pagina in parte, sao modificati si sa0uploadati inapoi pe server.

    Intr-un site dinamic se pot adauga ele-mente de interactivitate foarte usor. Me-todele puse la dispozitie de aplicatiile ser-ver-side ne pot ajuta sa transformam unsimplu site intr-o comunitate activa,Tendinta este cain vii tor, toate electroni-

    cele din jurul nostru sa fie conectate laInternet. Deja putem accesa site-uri wapprin intermediul telefonului mobil si s-ainventat pana ~i frigiderul care face singurcomenzile online. De aici se pot ridica 0serie de probleme de compatibilitate. Unsite creat pentru web va trebui recreat pen-tru a putea fi accesibil si de pe telefonulmobil sau ultimul racnet de mp3 player cuconectare la Internet. Avand continutulseparat de structura sau de prezentare, intr-o baza de date, se poate crea foarte usor unduplicat al site-ului original, cu un formatpotrivit destinatiei.De ce PHP i MySQL?Cel mai putemic motiv pentru folosirea

    PHP si MySQL ca unelte pentru crearea unuisite dinarnic este faptul ca amandoua suntopen-sour~e si oricine Ie poate utiliza laracosturi suplimentare. Un alt motiv este caaplicatiile create sunt cross-platform: PHP siMySQL ruleaza atat pe sisteme Linux siWindows precum si pe 0 multime de altesisteme de operare mai rar intalni te. Astfe1,puteti crea un intreg website pe calculatorulpersonal, lara sa instalati un nou sistem deoperare, iar la sfarsit doar sa transferati site-ulpe serverul Linux si sa ruleze lara probleme.In prezent, PHP este atat de putemic si

    versatil incat parra ~iliderul portalurilor, Ya-hoo!, a renuntat la limbajul sau proprietar,yscript, in favoareaPHP. Aceasta nu inseamnaca PHP este complicat sau dificil: dimpotriva,PHP si MySQL sunt foarte usor de invatat,chiar sipentru cei nefamiliarizati cu programa-rea sau bazele de date. Acest Special doreste sademonstreze acest lucru - tot ce va trebui safaceti este sa cititi si sa exersati chiar voi toateexemplele prezentate in continuare.

    Yahoo! a renuntat la limbajul proprl-etar yscript in favoarea PHP

  • 5/12/2018 Chip Special 22003

    7/68

    Instalare i cerinte de sistemCei trei magnificiInstalarea celor trei componente necesare functionarii unui serverweb poate da batai de cap chiar si unui utilizator experimentatin alecalculatoarelor. Omiterea adaugarii unei linii intr-un flsier deconfigurare va poate scoate peri albi lncercand sa aflati de celucrurile nu functioneaza asa cum ar trebui.Darde ce e atat de complicat, atiputea intreba? Ei bine, pentru vaexplica acest lucru, trebuie intaisa va povestesc ce se petrece de fapt peserver atunci cand scrieti m bara de adresea browserului http://www.chip.roli.vhp.spre exemplu. Cand apasati Enter,browserul trimite catre serverul de HTTPhttp://www.chip.roocerere: ..afiseaza-mipagina 1.php a site-ului www.chip.ro ".Acest server este Apache. Apache stie saserveasca (de aceea se sinumeste server)browserului doar pagini HTML. Pagi-nile HTML pot fi deja pe server saucreate, tot acolo, de catre alte aplicatii, lacererea serverului de web ~i servite caHTML browserului clientului. I n mo-mentul in care cerem pagina test.html depe server, Apache 0 serveste imediat.Daca in schirnb cerem 0 pagina cu altaextensie, php incazul de fata,Apache cautasa vada daca este configurat sa serveascapagini cu aceasta extensie si ce program seocupa de ele. Astfel, atunci cand cerem 0pagina cu extensia php, serverul Apache vatrimite mai departe cererea catre PHP, "secere un fisier PHP, ocupa-te de aceastacerere ~ida-mi inapoi 0pagina pe care sa0afisezclientului". PHPpreia cererea,ruleazacodul din program ~idaca vede ca se cerinformatii din baza de date MySQL, 0acceseaza, extrage informatiile cerute siconstruieste 0 pagina HTML pe care 0 vatrimite serverului Apache pentru ca acestasa 0 serveasca clientului.Un exemplu concret:primapagina a site-

    Configurarea serverului Apache.

    ului chip.roesteun fisierPHP careia din bazadedatecelemai noistiriadiiugatederedactorisi le t rimi teinapoi cat reApachecareleaf iseazavizitatorului.Daca va uitati in sursapaginiinuYetivedea decat codHTML. PHP ruleazii,,inumbra", pe server (de aceea se si nnmestelimbaj.serverside") ~iconlucreaziicuApacheastfel incat acesta din urma sa poata afisaclientului un rezultat interpretabil de catrebrowser - in acest caz 0 pagina HTML.Apache nu estepredefinit sa lucreze cu PHPsiviceversa. I n vederea colaborariiintre celedoua va trebui cadupa instalarealor samodi-ficati fisierele de configurare.In continuare va voi ghida prin insta-

    larea ~iconfigurarea Apache, PHP siMySQL.

    ApachePentru un site aveti in primul rand

    nevoie de un server HTTP. Alegereanoastra s-a indreptat spre Apache da-torita flexibilitatii sale, portabilitatii,sigurantei si extensibilitatii. Pe CD-ulalaturat puteti gasi doua versiuni Apache,pentru cele mai populare sisteme de op-erare. Va voi ghida in continuare prinprocesul de instalare pe un sistem Win-dows asa cum majoritatea dintredumneavoastra aveti,Ultima versiune Apache pentru Win-dows este 2.0.44. Kitul de instalare 11

    gasiti in directorul apache 2.0.44\binarype CD. Totusi, datorita faptului ca supor-tul PHP pentru Apache 2 este inca experi-mental, sfatul meu este sainstalati Apache1.3.27 pe care il gasiti pe CD indirectorulapache i.3.27\binary. Va va fi mult maiusor sa instalati aceasta versiune darfolositi-o doar pentru uzul personal, pen-tru a putea face pagini dinamice rara sa fitinevoiti sa va cumparati hosting la un ISPsau sa pierdeti tirnp cu configurari ex-haustive. Nu folositi serverul Apache peWindows 95 sau 98 pentru a va pune on-line site-urile, ci doar pentru a le crea inliniste in vederea publiciirii lor ulterioare

    pe un server securizat.I n tirnpul instalarii Apache, in mo-mentul in care vi se vor cere informatiidespre server, folositi urmatoarele date:Network domain: localhostServer name: localhostAdministrator 's EmaiiAddress: adresadvs. de mail.

    Nota: Daca instalati Apache 2, vatrebui ca dupa incheierea instalarii sasuprascrieti manual fisierul libapr.dll dinc\Program FilesiApache GrouplApache2\ bin cu eel din directorul apache2.0.44\binary'ipatch de pe CD.Pentru a putea servi pagini, serverul

    trebuie sa fie pomit, la fel ca oriceaplicatie, Faceti acest lucru accesand me-niul Start> Programs > Apache HTTPServer> Start Apache in console care vapomi programul intr-o consola. Pentru atesta, deschideti un browser si accesatiadresa http://localhost. Daca paginaafisata arata ca in imaginea alaturata,serverul este pomit si functioneaza,

    Primainstalare.Pentru a nu fi nevoiti ca de fiecare dam

    cand vreti sa aveti serverul pornit sa rulatiprogramul manual, puteti s a il porniti caserviciu si el va porni automat odata cuWindows. I n Windows NT, 2000 ~i XP,odata cu instalareaprogramului, este instalat~iserviciulApache. n putetisetasa porneascaautomat accesand Services (Windows Ser-vice Control Manager) din Control Panel(AdministrativeTools inWindows 2000). I nWindows 95/98 exista suportpentru serviciiinsa estedoarexperimental. PentrucaApachesa pomeasca automat la fiecare repomire aca1culatorului,trebuie sa ilinstalati intiii caatare. Folositi 0 consola MS-DOS promptpentru a intra in directorul C: \ProgramFiles\Apache Group\Apachesiatastaapache-i-n "apache". Dacamesajulprirniteste"The

    o pagina HTML sensa de utilizator ~iservlta de Apache.OH IP SPE OIA L - S ITE D IN AM IC

    http://www.chip.roli.vhp./http://www.chip.roocerere/http://www.chip.ro/http://www.chip.ro/http://www.chip.roocerere/http://www.chip.roli.vhp./
  • 5/12/2018 Chip Special 22003

    8/68

    apache servicehas been installedsuccessful-ly." puteti sa s i pornit i imediat serviciul (Iariia reboota) scriind Inconsola:apache -n "apache" -k start.Daca va hotarati sa nu mai folositi

    serviciul Apache, tastati in commandprompt apache -u -n "apache" si servici-ul va fi dezinstalat, iar programul nu vamai fipornit automat odata cuWindows.Document rootDocument root este directorul in care

    afla fisierele HTML si PHP ce vor fiservite de server. In cazul de fata el estedirectorul C: IProgram Files IApacheGroup \Apache Ihtdocs. Orice fisierpunetiin document root va fidisponibilla adresaftttp://localhost/numefisier. Puteti testaacest lucru creand 0 pagina test.html incare sa scrieti:

    Aceasta este 0 pagina de test

    Copiati fisierul test.htrnl in document

    root si tastati in bara de adrese a browse-rului http://localhostltest.html.Daca rezultatul nu arata ca in pagina

    anterioara, asigurati-va cii nu exista unalt server HTTP pornit (lIS, PWS, etc.).PHPCopiati continutul directorulul php4.3.Olbinarylphp-4.3. O-Win32 de pe CD

    in c: Iphp, iar apoi fisierul C: Iphplphp4ts.dll in c:lwindowslsystem.In continuare, pentru a va usura insta-

    larea puteti copia fisierul php.ini din di-rectorul chip.config de pe CD inc:lwindows.Alternativ, daca doriti sa faceti con-

    figurarea manual, deschideti fisierulc:lphplphp.ini-dist cu Notepad, cautatitextul doc_root= si schimbati-l cudoc _root="C:\Program Files\ApacheGroup\Apache\htdocs". Cautati apoi liniaextension_dir = si schimbati-o cuextension _dir= "C:\php". Salvati fisierul,redenumiti-l php.ini si copiati-l in direc-torul Windows.Apache+PHPInca nu vom putea accesa PHP din

    Apache deoarece acesta din urma estedeocamdata configurat sa serveasca doarpagini statice HTML.Daca ati urmat instalarea pas cu pas

    dupa recomandarile noastre, in direc-torul chip.config de pe CD Yeti gasifisierul de configurare pentru Apache,httpd.corif, gata pregatit, fiind suficientCH IP SPEC IA L - S ITE D IN AM IC

    ) ) O R G A N IZ A R E II M y S Q L ) ) P H P ) ) C R E A R E S I T E A D M I N I S T R A R E I) T I P S & T R I C K S

    sa suprascrieti cu acesta corespondentulsau din directorul C: IProgramFiles\Apache Group\ApachelconJ Dacadoriti sa faceti configurarea manual (incazul in care ati instalat PHP in alt direc-tor decat eel indicat aici), deschideti cuNotepad fisierul C: IProgram Files\Apache Group \Apache Iconf1.httpd.confsi adaugati urmatoarele 3 linii:

    LoadModule php4_module c: /php/ sapi/php4apache.dllAddModule mod_php4.cAddType application/x-httpd-php .php

    Cautati apoi linia Directorylndexindex.html si modificati-o in Directory-Index index.htrnl index.php. Pentru caschimbarile sa fie recunoscute va trebuisa reporniti Apache.Sa testam daca totul functioneaza cum

    trebuie. Creati cu Notepad un documenttext in care scrieti:

    test.php

    Salvati-l cu numele test.php si accesatiURL-ul http://localhost/test.php.

    Atentie! Daca Windows-ul dumnea-voastra este setat sa ascunda extensiile pen-tru fisierele recunoscute, documentul creatcuNotepad va fide faptnumit test.php.txt~iadresa http://localhost/test.php nu va puteafi accesata deoarece test.php nu existii. Incazul acesta aveti doua solutii: oricontinuatisa lucrati cu Notepad, dar va trebui sadezactivati ascunderea extensiilor pentrufisierele cunoscute, ori folositi un editorPHP din celepuse la dispozitie pe CD.MySQLPentru a instala ultima versiune MySQL

    pentru Windows nu este nevoie decat saporniti setup.exe din directorul mysql3.23Ibinary. Deoarece MySQL este unserver, ca si Apache, va trebui mffii sa-lporniti daca doriti sa lucrati cu el. Pentru a-1pomi, rulati C:lmysqllbinl mysqld.exe pe

    Daca nu merge...Note pentru instalarea ~irulareaApacheNu functloneaza? ,, D aca ;tuncicahd accesatia(fr~g~';httP:I/localhost nu vedeti 0 pagina cu mesajul"If you can see this, it means that theinstallation of the.Apachewebserversoft-ware on this system was succ ful.",;verificati,lntai~~~~,se~erul es , it ,~idaca nu cumvaaveti' alt se TIP(pWS, lIS) care ruleaza.Windows 95Daca aveti Windows 95 trebuie sadownloadatiisa,instalatiWindow~,Socket:~Update ge~~'~icr9soft .111ai~H'\ICiI~.~aincepe instalarea.Apache.Windows .~T4.0, 98,ME si 2000nu au nevoie de acestupdate. Adresa de download este: http://"wwwmicrosoft.com/windows95/down-loadslcontentslwuadmintoolsls.wunet0'w6rkingtools/ 'kels'fldefauit.asp i ,;'Windows XP ,Pentru a putea folosi Apache pe siste-mele Windows XP trebuie sa avetiWin-dows XP ServicePack 1 instalat-Ilputeti

    obti)1ede..la hltp:/lwww.microsoiiJ.!orn/,~in'doWsxp/pr(jJr~q'Wnloa'ds/serviceflackslsp .l /de faul t. asp . , ., . [IAtentie!Pe' unele sisteme poate fi necesar sacopiatifisierelephp-lepache.dllsiph~4ts.dlldin directorulIphpl .m direotorul/win9ows.Windows 95/98 sau C:lmysqllbinlmysqld-nt.exe pe NT/20001XP.Ca serverul de MySQL sa porneascaautomat la fiecare repornire a Windows,puteti adauga un shortcut in Start Menu/Start up catre C:lmysqllbinlmysqld.exe(respectiv mysqld-nt.exe). Esterecoman-dat cape Windows NT/20001XP sa setatiserviciul MySQL sa porneasca automat.Sa testam: dupa ce ati pornit serverul

    mysqld scrieti urmatoarea linie in com-mand prompt:c: \mysql \bin \mysqladmin ve rsion sta-tus procDaca output-ul este asemanator celuidin fereastra alaturata, serverul MySQL

    functioneaza.

    Serverul MySQL a fost instalat!?i ruleaza.Nota: Pentru ca saruleze, MySQL are

    nevoie de protocolul TCP/IP. Pe siste-mele cu Windows NT4 trebuie sa avetiinstalat Service Pack 3.

    http://localhostltest.html./http://localhost/test.php.http://localhost/test.phphttp://localhost/test.phphttp://localhost/test.php.http://localhostltest.html./
  • 5/12/2018 Chip Special 22003

    9/68

    II I N S T A L A R E II

    Organizarea preliminara

    Organizarea preliminara este 0prac-tica obisnuita in firmele. de software si ar trebui sa fielegea de capatai a oricarui programatorweb. Daca stim dinainte cum vrem safunctioneze 0 aplicatie, cand trecem lascrisul codului com putea sa ne concen-tram exclusiv asupra programiirii fiira saavem alte preocupari. De aceea vom luaun creion si 0hartie ~ivom descrie fiecarepagina a site-ului, functionalitatile ei si .modul incare utilizatorul va interactionacu elementele acesteia.Sa definim intai ce dorim sa obtinem

    de la site-ul nostru. Dorim ca vizitatoriisa cumpere carti, la fel ca intr-un maga-zin "real". Ei vor putea sa se plimbe prinspatiul virtual, sa vada copertele cartilor,sa rasfoiasca doua-trei pagini, sa i~ipunafiecare carte intr-un cos de cumparaturisi la sfarsit sa se ducii la casa pentru aplati. Fiecare carte va fi lnsotita ~i de 0scurta descriere deoarece nu yom aveaun librar care sa faca acest lucru pentrunoi. La fel ca la librarie, cartile vor fiaranjate dupa domeniul caruia apartin

    C . ,AVl t 0 cl \ 1nco"TnvaloaretotalideOle1.~ ~----------------~Ado1UQloplnlohl;- ~Mi ." , p i l l cu t ce mamutdin toa.\sena

    II M y S Q L " P H P " C R E A R E S I T E " A D M I N I S T R A R E T I P S & T R I C K S

    pentru a le putea localiza mai usor. Si totpentru ca nu avem un librar caruia sa iicerem direct .Dati-mi seria Fundatiei deAsimov" sau "Ce carti aveti desprePHP?", vom pune la dispozitia vizitato-rilor nostri un motor de cautare pentru agasi rapid ceea ce ii intereseaza fiira a finevoiti sa piarda timp pretios cautandprin rafturi. Deoarece un magazin virtualaduce foarte mult cu unul real, 0 sa vaprezint in continuare fiecare pagina asite-ului prin analogie cu 0 librarie reala.VitrinaNe aflam la usa librariei. Putem vedea

    rafturile de caqi marcate sugestiv "Manu-ale", "Medicina", .Poezii", .Aventuri","SF", "Calculatoare", etc. in vitrina seafla cateva carti alese pe spranceana decatre librar: cartile foarte populare sinoile aparitii.La fel va fi ~i prima pagina a maga-

    zinului nostru virtual: vom prezenta ge-nurile de carti pe care Ieavem disponibile,best-seller-urile, precum si cele mai noiintrari, Pentru ca spatiul virtual ne per-mite, tot de la intrare vom oferi vizita-torului si un cos de cumparaturi precumsi optiunea de cautare pentru a gasi 0carte rapid, la fel cum ne ducem intr-olibrarie reala direct laprimul angajat sa11intrebam atunci cand cautam 0 anumecarte.Pe raftIntram illmagazin pentru a cumpara 0

    carte pentru un prieten a carui zi de nastereeste duminica, Acestuia ii plac povestirileSF asa ca ne indreptam spre sirul de rafturideasupra caruia scrie "SF" pentru a vedeace am putea alege. Acest lucru este echiv-alent cu a da click pe unul din domeniileprezentate pe prima pagina si a intra illpagina dedicata acelui domeniu unde se

    afla insirate cartile apartinand acestuia.Pe aceasta noua pagina iivom arata vizita-torului cartile ordonate dupa autor si titluinsotite fiecare de 0 scurta descriere si depretul cartii. Titlul cartii va fi sub forma delink astfel incat vizitatorul sa poata apasape el si sa vada mai multe detalii desprecartea respectiva.

    Cu creionul pe hartleRegula numarul lin programare este organizarea preliminara. Deacesta depinde succesul actiunii la care ne vom mhama. Pentru ascrie cod bun trebuie sa stim destul de dar care ne sunt obiectiveleinainte de a scrie chiar ~iun tag HTML. Cateva minute de organiza-re preliminara ne pot scuti de revenirea la cod pentru a aducemodificari sau chiar rescrierea intregii aplicatli.

    Carteainmagazinul real putem lua 0 carte din

    raft pentru a-i vedea coperta si a 0 rasfoi.Cam acelasi lucru vom face si ill site-ulnostru. Apasand pe link-ul reprezentat detitlul cartii se deschide 0 nona pagina illcare vom prezenta detaliile cartii, imag-inea copertei, pretul si butonul de pentruadaugarea cartii in cos. Vom mai adaugasi 0 sectiune in care sa putem vedea co-mentariile celor ce au citit deja cartea,precum siposibilitatea de a adauga un noucomentariu. Aceasta functie este deosebitde utila atunci cand cumparam 0 cartepentru cineva si domeniul ne este strain.Avand la dispozitie comentariile celorlaltiputem alege 0 povestire SF buna pentruprietenul nostru chiar daca n-am citit-oniciodata,Co~ul de curnparaturlAtunci cand un vizitator va apasa bu-

    tonul .Adauga in cos" el va fi redi-rectionat spre 0 noua pagina in care iieste afisat continutul cosului ~i douaoptiuni: sa continue cumparaturile sau samearga la casa pentru a plati. In cazul incare doreste sa mai cumpere, aplicatianoastra va tine minte alegerea vizitatoru-lui pentru a i-a putea afisa la 0 nouaprivire in cos. Valoarea insumata a cartiloradaugate in cos 0 vom afisa permanent

    J!!l i!t i 't ..- - t . . . . . . . . . . . . . . ,@ ! ~ - ~Usta rezultatelor cauUirii.OH IP SPEC IA L - S ITE D INAM IC

  • 5/12/2018 Chip Special 22003

    10/68

    MU J '-t .!4mW P ..!l.H 1 ,IdeWilta.m5llallKPfiI'f/ deMlhalE_scu

    p",t: 87000Ie, prat: 1~[J Is,

    QYrge'BJrrtaCommUD!(jI\lo!l'i

    Iii ;;:$ , , , , - , , , , = _ " '~Prima pagina: cele mai noi ~imai popu-lare cartl,intr-un colt alpaginii, pentru a imbunatatiexperienta vizitatorilor pe site-ul nostru(acestia nu vor mai trebui sa calculezepermanent In minte starea bugetului decare dispun). Utilizatorul va putea apasaIn orice moment pe cos pentru a-i revizuicontinutul (cartile alese pana in momen-tul respectiv). Daca totalul depasestebugetul alocat el poate scoate 0 carte-doua din cos. Daca in schimb i~i aducemaminte in ultimul moment ca un alt pri-eten cauta aceeasi carte ca cea pe caredoreste sa 0 daruiasca, utilizatorul poatemodi fica numarul de bucati din cos pen-tru a cumpara doua in loc de una.CautareSa presupunem ca vizitatorul va veni

    pe site-ul nostru cautand 0 anume carte.Pentru aceasta situatie vom avea functiade cautare, EI va putea cauta dupa maimulte criterii: autor, numele cartii saudescriere. Rezultatul iiva fi afisat la felca in pagina de domeniu: titlu, autor sidescriere, cu titlul sub forma de link catrepagina dedicata cartii,CasaDeoarece illRomania inca nu se pot

    face tranzactii online adevarate, solutiacea mai laindemana pentru a putea vindeonline este trimiterea de catre cumpara-tor a bani lor prin mandat postal sau ordinde plata, urmand ca dupa confirmareaplatii vanzatorul sa ii expedieze acestuiaprodusele comandate. Astfel, dupa ce vi-zitatorul nostru s-a hotarat asupra cartilorce doreste sa le cumpere si apasa butonul"Mergi la casa", el va fi redirectionatspre 0 noua pagina in care va puteaintroduce adresa unde doreste sa le pri-measca, Dupa introducerea acestor de-CH IP SPEC IA L _ S ITE D INA MIC

    M y S Q L ) ) P H P ) ) C R E A R E S I T E II A D M I N I S T R A R E II T I P S & T R I C K S

    talii va apasa pe "Incheie tranzactia", iiva fi afisata 0 pagina de multumire sidumneavoastra veti fi anuntat prin emailde cerere pentru a 0 putea onora cat mairapid.AdministrarePe langa acestea vom avea nevoie si de

    o sectiune de administrare cu ajutorulcareia saadaugam sau sa scoatem caqi dinrafturile magazinului virtual, sa definimdomenii si sa revizuim comentariile vizi-tatorilor (exista si posibilitatea ca vreunglumet sa adauge un comentariu nepo-trivit care ar trebui sters sau modificat).Tot illsectiunea de administrare vom aveao pagina unde sa vedem ultimele cereri sisa biram tranzactiile efectuate cu succesdupa primirea banilor si trimiterea cartilorcerute catre destinatar.Structura siteDupa ce am terminat cu cerintele, vom

    trece la impartirea pe pagini. Astfel avem:Zona publicaindex. php - prima paginadomeni u .php - pagina dedicata unui

    domeniu (SF, Aventuri, etc.) in careafisam cartile din domeniul respectivcarte. php - pagina in care putemvedea detalii despre carte, coperta, co-mentariile utilizatorilor si in care fiecareutilizator va putea adauga un comentariupersonaladauga _comentariu .php-vapro-

    cesa textul trimis de utilizatori si il vaadauga in baza de datecos. php - pagina unde vizitatorui

    poate vedea si edita continutul cosului de

    Cosul de cumparaturl,

    ",,-,,~Usta cartllor din domeniul Poezii.cumparaturicas a . php - formularul de introduc-

    ere a datelor pentru expediere si plataprelucrare. php - pagina care vaprelucra datele trimise prin formularuldin casa.php: le introduce in baza dedate, va trimite un email de notificare si .apoi afiseaza .Multumim pentru ca aticumparat de la noi".Zona de administrareToate paginile din aceasta zona vor fi

    protejate de parola pentru ca numaidumneavoastra sa aveti acces si se vorafla in directorul admin:index. php - afiseaza un formular delogin;log in .php - verifica informatiile din

    formular si autorizeaza sau nu accesulmai departe, la pagina urmatoare;comen z i . php - cu ajutorul acestei

    pagini vom face cele mai dese actiuni. Eava contine comenzile inca neonorate siva va da posibilitatea de a le marca. Inmomentui in care primiti banii pentru 0comanda 0 puteti marca "Vandut" siaceasta nu va mai aparea in lista. Daca illschimb 0 comanda este mai veche de 0luna 0 puteti sterge deoarece probabilcumparatorul s-a razgandit si nu s-a maidus la posta pentru a va trimite banii;adaugare. php - pentru adaugare sau

    stergere de caqi ~idomenii din e-magazin;modificare_stergere.php - paglna cu

    ajutorul careia vom putea modifica sausterge date de pe site: carti, autori, dome-nnopinii. php - afiseaza comentariile

    utilizatorilor neverificate inca de noi sine da posibilitatea de a le sterge saumodifica pe cele nepotrivite.in continuare vom trece la crearea ba-zei de date a magazinului virtual urmandca apoi sa facem paginile PHP din care vafi compus site-ul.

  • 5/12/2018 Chip Special 22003

    11/68

    E D I T O R I A L ) ) I N T R O D U C E R E ) ) I N S T A L A R E ) ) O R G A N I Z A R E ) ) _ ) ) P H P ) ) C R E A R E S I T E ) ) A D M I N I S T R A R E ) ) T I P S & T R I C K S

    Introducere in MySQL

    SQL-ulin maruntalelebazei de date

    meu ~i-al tau1 8 : 0 0 S t i r i1 9: 0 0 D e s e n e a n im a t e : M ic a s i r e n a2 0 :0 0 T a l k s h ow f i n a nc i a r2 1 :0 0 f i lm s e r i a l : S ta r T re k ( e p 1 4 0 )1 6 : 0 0 P r o g ra m p e n t r u c o p ii

    Baza de date este coloana vertebrala a unui site dinamic. in acest capitol vom afla tot ce avem nevoiesa stim pentru a construi si a lucra cu 0 baza de date.

    L a fel ca intr-o librarie, cartile dinmagazinul nostru virtual vor tre-bui aranjate dupa domeniul caruiaii apartin, nu vom pune laolalta intr-oharababurii Tariisens romane de aventuricu manuale scolare ~iciirti de psihologieaprofundata,In ' aplicatia noastra va trebui sii orga-nizam datele cartilor in asa fel incat siileputem giisi usor dupa domeniu, sii le or-donam dupa titlu sau siile alegem pe celeapartinand unui anumit autor. Solutia ceamai flexibilii care sii corespunda acestorcerinte este baza de date.Colectii de dateBaza de date este, in trei cuvinte, 0

    colectie organizatii. Caexemple v-as puteada cartea de telefon sau programul TV dinjurnalul pe care ilcititi dimineata la cafea.In cartea de telefon gasim numele si pre-numele abonatului, adresa si numiirul detelefon, toate acestea ordonate dupanume,pentru a cauta mai usor 0 anumitii per-soana. Daca am avea cartea de telefon informat electronic intr-o baza de date amputea face 0 ordonare dupa numarul detelefon inordine crescatoare pentru a aflacine are eel mai rnic numiir. Am putea deasemenea sii aflam cati abonati au numecare incep cu T , cali dintre ei au prenu-mele Ion, numiirul de abonati din oras, pecare stradii sunt cele mai multe posturitelefonice si asa mai departe.Inprogramul TV informatiile au urma-

    toarea structurii: canalul, ora difuzarii, nu-mele programului. Acestea sunt de obiceiordonate dupii canal si ora difuziirii, astfel:C a n a l u l A1 6 : 0 0 O e s e ne a n im a te : B a l a ne l s i M i a u n e l1 8: 0 0 f i lm : T ac e re a m ie i l o r1 9 : 0 0 S t i r i2 0 : 0 0 f i lm : M a t r ix2 2 : 0 0 M u z i c aC a n a l u l B1 6 :0 0 M u z ic a1 7 :0 0 D o c u m e nt a r: A I d o i l e a r a z b oi m o n d i a l

    C a n a l u l C1 7 : 0 01 8 : 0 01 9 : 0 02 0 : 0 02 2 : 0 0

    D e s e n e a n im a te : O e x t e rf i lm s e r ia l V IP ( ep .l 0 1 )S t i r if i lm : L o r d o f t he R in gsD o c um e n ta r : M a r e le a lb

    Sa ne imaginam cii taiem cu foarfecadin ziar fiecare nume de program si orade difuzare.Atunci ne-am putea ordona progra-

    mele dupii ora difuzarii astfel Incat saputem distinge mai usor ce ne intere-seazii intr-un anume interval orar:O ra N u m e p ro g r a m C a n a l1 6 : 0 0 D e s e n e a n im a te :

    B a la n el s i M i au n e l C a n a l u l AM u z i c a C a n a l u l BP r o g ra m p e n t r u c o p ii C a n a l u l C

    1 7 :0 0 D o c u m e n ta r: A I d o i l e a r a zb o i m o n d ia l C a n a l u l BD e s e n e a n im a t e :D e x t e r C a n a lu l C

    1 8 :0 0 f i lm : T ac e re a m ie il o r C a n a l u l AS t i r i C a n a lu l Bf i lm s e r i a l V IP ( e p . 1 0 1 ) C a n a lu l C

    1 9 :0 0 S t i r i C a n a l u l AD e s en e a n im a te : L il o s i s ti t c h C a n a lu l BS t i r i C a n a lu l C

    2 0 : 0 0 F ilm : M a t r i x C a n a lu l AT a l ks h o w f in a n c ia r C a n a lu l BF ilm : L o r d o f t h e R in g s C a n a l u l C

    2 1 : 0 0 f ilm s e ria l : S t a r T re k( e p. 1 40 ) C a n al u l B

    2 2 : 0 0 M uz i c a C a n a lu l AD o c um e n ta r : M a r e le a lb C a n a l u l C

    Avand 0bazii de date scapam ~ideziarsi de foarfeca deoarece ne putem ordonaprogramele dupa plac, putem alege siivizualizam doar programele intre ora 17si ora 22, putem afisa pe ecranul calcula-torului doar filmele din program si asamai departe.

    Am spus ciibaza de date este 0colectieorganizatii, acum este momentul sa viiarat si cum este organizatii. 0 baza dedate este compusa din unul sau mai multetabele (tables) care, la randul lor, suntformate din inregistrari dispuse in cam-puri (fields).Daca ati lucrat vreodata cu un pro-

    gram de calcul tabelar vii puteti imaginabaza de date ca fiind documentul cecontine mai multe foi de lucru (tabelele),campurile ca fiind coloanele tabelelor sio inregistrare oarecare ca fiind un randdin tabel. Sii luam exemplul cartii detelefon. Baza de date va contine un sin-gur tabel eu 4 campuri: nume, prenume,adresa, numar de telefon.N u m e P r e n u m e A d r e s a N u m a r d e t e le lo nA n d u P a u l L u n i i 2 9 4 5 6 7 8 9 3B a c i u B i a n c a V i f o r u l u i 1 5 3 4 5 6 8 7 4C r e t u M i h a i M u n c i i 4 2 1 5 4 6 8 6F u l g R a m o n a R e p u b li c ii 1 4 1 4 4 5 3 2 8Z i n c G h e . B d . G a r ii 2 A 6 5 2 2 5 5 4Continutul fiecarei linii se numeste

    generic inregistrare (record). Din primainregistrare stim cii Andu Paul locuiestepe Lunii 29 si are numarul 456789.Valoarea campului Nume al primei in-registrari este Andu, iar valoarea campu-lui Prenume a celei de-a doua inregistrarieste Paul. Baza de date a departamentu-lui contabilitate a unui magazin de pa-petiirie va avea mai multe tabele care siicontina tipuri diferite de date. Niciuneicontabile nu ii va fi util sii aiba furnizoriiamestecati cu stocurile si eheltuielile, civa dori sa aiba aceste date separate, dartotodata puse laolalta in acelasi loco Eava avea nevoie de un tabel Stoc care siicontina doua campuri:N u m e p ro d u s N r . b ue . i n s t o eC r e i o a n e 3 5 1 1P i x u r i 5 0 0 0P l i c u r i A 4 2 7 5

    C HIP SPEC IA L - S ITE D IN AM IC

  • 5/12/2018 Chip Special 22003

    12/68

    E D IT O ~ I A L ) ) I N T R O D U C E R E i) I N S T A L A R E O R G A N I Z A R E _ ) ) P H P ) ) C R E A R E S I T E A D M I N I S T R A R E - r i P S & T R I C K S

    Va mai avea nevoie si deun tabel Chel-tuieli care sa a ib a u rm a to ar ea s tr uc tu ra :

    P r o d u s s a u s e [ 1 l i c i u C o s t D a t a; . , ' " ,-,.j)De c o r a l i u n i 5 .0 00 .0 00 le i 2 0 . 1 2 . 2 0 0 2R e p a r a lii 7 0 0 . 0 0 0 le i 0 3 . 0 1 . 2 0 0 3J a l u z e l e 1 2 . 0 0 0. 0 0 0 le i 0 4 .0 1 . 2 0 03

    Pe langa acestea ii vor mai trebui incacateva tabele pentru salarii, vanzari, etc.,pentru ca la sfarsitul anului sa centrali-zeze datele din toate ~isa faca bilantul.Din acest exemplu putem observa ca

    exista cazuri in care avem nevoie de maimultetabelepentruorganizareainformatiei,tabele pe care le tin em in tr- o sin gu ra b azade date pentru 0 accesare mai usoara saupentru a intermedia relatii intre ele. Dardespre asta mai tarziu,o baza de date poate avea un numarurias de tabele ~iinregistrari, De pe site-ul www.mysql.comaflam ca exista la oraactuala baze de date pe MySQL Servercu 60000 de tabele si 5 miliarde de inre-gistrari. Impresionant, nu? Cum ar fi fostsa stocam aceasta cantitate de informatiepe hartie, in cataloage, si sa cautam prinmilioane de pagini ce ne intereseaza?Ce este MySQl?MySQL este eel mai popular sistem

    de ~anagement pentru baze de daterelationale deoarece este Open Sourceadica poate fi folosit rara sa fim nevoitisa platim vreo suma de bani. MySQLServer a fost creat pentru a lucra cu bazede date mai rapid decat solutiile exis-tente deja si este folosit de ani buni inmedii foarte solicitante.Intr-o baza de date relationala datele

    sunt stocate in mai multe tabele separate,fund astfel imbunatatite viteza s i f l ex ibi l i-tatea. Tabelele pot fi legate prin relatiidefinite de noi, fiind astfel posibil sacombinam la cerere datele di n mai multetabele.Ce lnseamna SQl?SQL, acronimul pentru "Structured

    Query Language", este limbajul stan-dard pentru comunicarea cu bazele dedate. Comenzile SQL sunt folosite pen-tru a interactiona cu baza de date (deexemplu sa adauge, sa modifice sau sastearga datele).Alte sisteme de baze de date care

    folosesc SQL sunt Microsoft SQL Serv-er, Access, Oracle, Sybase, etc.

    CH IP SPEC IA L - S IT E D IN AM IC

    Baza noastra de datePentru a ne putea face 0 baza de date

    trebuie ca serverul MySQL sa fie pomit.Daca ati unnat pasii descrisi in capito luiinstal are, serverul MySQL ar trebui saruleze deja, el fiind repornit automat lafiecare restartare a calculatorului.In continuare va trebui sa folosim 0

    aplicatie cu ajutorul careia sa comunicamcu serverul. Aplicat ia se numeste simplumysql.exe si se gaseste in acelasi director,c:\mysql\bin\. Vom intra in commandprompt apasand pe Start, apoi pe Run siscriind command in campul destinat pro-gramului ce urmeaza sa fie rulat.Odataaflati in linie de comanda, scriem:c: \mysql \bin \mysql. exe -p -u rootiar cand ni se cere parola apasam EN-TER.Daca serverul nu este pomit vom pri-

    mi mesajul de eroare "Can't connect toMySQL server on 'localhost"'.Serverul de MySQL, ca orice server

    care se respecta, ofera posibilitatea de aavea mai multi posesori de date pe acelasisistem, fiecare cu drepturile lui. Astfel ,serverul unui ISP de exemplu va putea fifolosit de mai multi oameni, fiecare avandmai multe baze de date s i nepu tand sa vadace au ceilalti utilizatori ai aceluiasi server.Utilizatorul implicit (si cu drepturidepline, de altfel) este root, iar parolainitial a este goala. Vom lucra cu acestedate pentru inceput dar puteti consultamanualul MySQL inclus pe CD pentru aafla cum puteti adauga utilizatori noi sauschimba 0 parola in MySQL.SHOWOdata autentificati vom putea cornu-

    nica cu serverul MySQL folosind comen-zi SQL. Trimiterea unei comenzi SQLcatre serverul de baze de date se mainumeste si interogare. Sa facem primanoastra interogare si sa aflam daca existadeja vreo baza de date pe server:SHOW DATABASES;

    Rezultatul unei interoqarl SHOWCOLUMNS.

    Acestea sunt bazele dedatedisponibilepe server.Rezultatul primit de la server va arata

    ca in imaginea de mai sus.Am incheiat interogarea cu punct si

    virgula deoarece toate comenzile SQL(cu exceptia QUIT siUSE) trebuie inche-iate astfel pentru a semnala serverului caam terminat de scris propozitia si capoate trece la procesarea cererii. Existacazuri in care 0 interogare poate fi foartelunga si atunci ar trebui sa 0 "rupem" incateva bucati mai mici, pe mai multeranduri. MySQL ar da eroare daca arobserva ca propozitia este neterminataasa ca nu uitati sa incheiati interogarilecu punct si virgula.Sa inspectam una din bazele de date de

    pe acest server. Pentru a face acest lucru,spunem serverului cu ce baza de datedorim sa interactionam in continuare:USE testVom primi mesajul "Database

    changed" si baza de date 'test' va ramanecea in care ne vom face interogarile panala deconectarea de la server sau dacadecidem sa folosim 0 alta baza de date,cu aceeasi comanda:USE alta_baza_de_dateSetarea unei baze de date ca fiind cea

    curenta nu ne impiedica totusi sa ac-cesam tabele din alte baze de date informa nume _bazd_de_date.nume _tabel.Comanda USE este pastrata pentru com-patibilitate cu Sybase.Tot comanda comanda SHOW 0 vom

    folosi pentru a vedea ce tabele exista inbaza de date test in care ne aflam:SHOW TABLES;Observam ca baza de date test nu arenici un tabel. Sa vedem daca cealalta are,schimband baza.de date cu care dorim sainteractionam (USE mysql) si repetand

    Nu este nici un tabel in baza de datetest.

    http://www.mysql.comaflam/http://www.mysql.comaflam/
  • 5/12/2018 Chip Special 22003

    13/68

    Interogarile SQl se pot scrie pe maimulte rand uri cu conditia ca ultimalinie sa se incheie cu punct sl virgula.comanda SHOW TABLES.o alta utilizare a lui SHOW esteSHOW COLUMNS care afiseazainformatii despre coloanele unui tabel.CREATE ~i DROP

    A m spus ca vom face 0 baza de datespecial pentru site-ul magazinului nostrude carti, Sa trecem atunci la treaba. Vomscrie in linia de comanda:

    Serverul ne afiseaza "Query OK" decibaza de date a fost creata. Va trebui samai spunem serverului ca aceasta estebaza de date cu care urmeaza sainteractionam in continuare:USE librar.ieAm putea sa folosim interogarea

    SHOW TABLES si aici, insa ea nu ne-ararata mai mult dedit stim deja: ca nouabaza de date nu are inca nici un tabel. Safacem, deci, unul:CREATE TABLE tabel_test

    (camp_test TEXT);Terns: executati comenzile SHOW

    TABLES si SHOW COLUMNS pentrunoua baza de date sitabelul proaspat creat.Sa luam cuvant cu cuvant propozitia:CREATE TABLE tabe1_test(camp_testTEXT) inseamna "creeaza tabelultabel test cu un camp numit camp textal carui tip este TEXT. Pentru a afla ceeste tipul de date si la ce folosesteconsultati oglinda .Tipuri de date".Sa facem inca un tabel, cu trei coloane:

    Campurile ~i tipul de date contlnut deacestea din tabelul tabel_test2.

    CREATE TABLE tabel_ test2( camp 1TEXT, camp2 INT, camp3 TINYINT);In imaginea alaturata putem vedea

    mai multe informatii despre fiecare camp.Sa le analizam:- prima coloana, Field, este numele

    campului;- a doua, Type, este tipul de datecontinut de camp. TEXT inseamna cadatele de pe coloana respectiva vor fitexte, INT ca vor fi numere intregi siTINYINT ca in coloana respectiva vor fiintroduse doar numere intre -128 si 127;- in a treia daca este NULL sau nu, a

    patra, Key arata daca este index, in acincea, Default Value, este specificatavaloarea implicita siultima coloana aratace alte proprietati mai are campul,Sa revenim la magazinul nostru de

    carti, sa recapitulam datele de care avemnevoie in site si sa incercam sa le orga-nizam logic. Fiecare carte are un autor,un titlu si 0 scurta descriere. Toate suntde tip text, deci asa vor fi si tipurile decampuri aferente lor:CREATE TABLE ca r ti. (

    autor TEXT,titlu TEXT,descriere TEXT);

    I n cazul in care nu a fost semnalatanici 0 eroare, tabelul nostru a fost creat.Saverificam, de dragul exercitiului, acestlucru, cu comenzile SHOW TABLES siSHOW COLUMNS.. Pentru a sterge un tabel, 0 baza dedate, un index sau 0 coloana dintr-untabel folosim comanda DROP astfel:DROP TABLE tabel_test;DROP DATABASE librarie;Desi MySQL are suportpentrudiacriti-

    ce si setul de caractere 8859-2, este prefe-rabil sa nu folositi diacritice in numelebazelor de date, tabelelor sau campurilor.De asemenea, nu puteti folosi ca nume detabel sau de camp cuvintele rezervate(nume de functii , tipuri de caractere dinMySQL precum create, drop sau column).Ar mai trebui sa ~titi ca puteti folosi

    nume de tabele care contin spatii dar inpractica trebuie sa incadrati numele intreback-ticks" (semnul back-tick 11gasitipe tasta aflata imediat sub Escape):CBEATETABLE' tabel al carui numeare spatii'('camp 1', TEXT);SHOWCOLUMNSFROM'tabel al caruinume are spatii';

    " A D M I N I S T R A R E T I P S & T R I C K S

    SELECT 'camp l' FROM 'tabel alcarui nume are .. spatii ';

    INSERTHaideti sa introducem cateva date in

    tabelul carti. Comanda pe care 0 vomfolosi este INSERT si sintaxa este:INSERT INTO t.abe I (campi, carnpz,camp3) values (valoarel, valoare2,valoare3)

    In romaneste aceasta comanda s-artraduce "introdu in campull valoareal,in campulz valoarea2 si in campulsvaloarea3", iar in format tabelar ar aratain felul urmator:campull campu12 campu13valoarea1 valoarea2 valoarea3

    Sa trecem la treaba si sa exersamcomanda INSERT:INSERT INTOdescriere fVALUES{+'Willi'am Shakes-peare', 'Romeo sL Julieta', 'Ceamai frumoasa poveste de dragostea tuturor timpu~ilor'};

    Am pus ghilimele in jurul fiecareivalori ce urmeaza a fi introduse pentru astabili ca acela este un text unitar, unstring de introdus in campul respectiv.Imaginati-ve cam cum ar interpreta ser-verul comanda noastra daca am scrienumele autorului in forma Shakespeare,William. Atunci textul interogarii ar fi:INSERT INTO carti(autor, titlu)VALUES(Shakespeare, William, Ham-let) si serverul MySQL ne-ar returnaurmatoarea eroare: "Column countdoesn't match value count at row 1"deoarece se asteapta ca pentru douacoloane sa aiba de introdus tot douavalori separate prin virgula, nu trei. Dacaam fi specificat ca vrem sa introducemvalori in toate cele trei coloane am fiprim it alt mesaj de eroare deoareceMySQL nu ar fi recunoscut textul'Shakespeare' ca fiind string si s-ar fioprit din executie.Daca dorim, putem sa omitem una din

    coloane ca in exemplul urmator unde nuadaugam nimie in campul descriere:INSERT INTO (au t.or , titlu)VALUES('William Shakespeare','Hamlet');

    C HIP SPEC IA L - S ITE D IN AM IC

  • 5/12/2018 Chip Special 22003

    14/68

    I N T R O D U C E R E I N S T A L A R E ) ) O R G A N IZ A R E _ ) ) P H P C R E A R E S I T E A D M IN I S T R A R E T IP S & T R IC K S

    Sintaxa lui INSERT poate fi simplifi-cata daca luarn in calcul toate campuriletabelului deoarece le putem omite,mentionand doar valorile ce urmeaza a fiadaugate ca in exemplul urmator:

    INSERT INTO earti VALUES(,'MihaimaipoctuLui

    national'J;

    Observam cli nu am mai specificatcoloanele in care urmeaza sli introducemdate, sintaxa fiind astfel mult simplifi-cata. Daca dorim sli beneficiem de sin-taxa prescurtata pentru INSERT dar nuavem 0valoare pentru un camp, putem slinu punetn nimic intre ghilimelele care.delimiteaza valoarea respectiva, ca inexemplele urmatoareunde nu introducemnici un text (sau un text gol, daca vreti sliii spuneti asa) in campul descriere:INSERT INTO earti VALUES('Mihai

    INTOcarti VALUES'Alexandru~;"''Legendele,iOlifuI:nill,lt';, ");

    INSERT INTO car t. VALUES'GeorgeCosbue', 'Fire de tort - Poezii', ");

    '(AWES ( 'Mihai" )i

    Temli: Adaugati folosind INSERTinca 5 clirli in tabel specificand titlul,autorul si eventual 0 scurta descriere.SELECTAcum avem baza de date, avem si

    cateva date introduse ... dar cum le ve-dem? Vom folosi SELECT, cea mai im-portanta comanda SQL si ii yom vedeacateva din utilizari in exemplele urma-toare. Am aflat cum putem vedea cetabele sunt intr-o baza de date, hai sliaflam si ce contine un tabel. Sli luamprimul tabel din facut de noi si sa afisamdatele din el:

    * FROMtabel_test,;Ne va fi returnat urmatorul mesaj:

    El.ll)

    Empty set inseamna cli tabelul nucontine date, e gal. Numarul dinparantezereprezinta secundele care i-au luat serve-rului ca slireturneze un rezultat. Sa incer-C H IP S P E C I A L - S I T E D IN A M IC

    Tipuri de dateSa nu amestecam mere cu pere...Tipurile de date care apar in coloanele MySQL ar putea parea 0 complicatie inutila la primavedere. Oare nu amputea la0adica sa adau~lim datele;!nce forrna~yem nevoie? LUCluril~;P]lstau chiarasa, MySQL aloca spatiu pe disc Infunctie de tipul de date specificat de'utilizatot:Daca in tabelul salariati avem 0 coloana pentru numarul de zile de concediu legal 0 vorn setaca fiind TINYINT deoarece aceasta este valoarea numerica in . care se incadreaza (un salariatnu va ayea mai rnult de 127 de zile de concediu pe an!). Pentru fiecare InregistJ;ilrein colp~azile~cOJ;lcediuMySQL va aloca 1 byte de memorie.jndiferent daca,un angajat.are2 zile',peconcediu si altul are 18. Daca acelasi camp 11setiin:! oa INT, MySQL va aloca fiecareiinregistrari In coloana 4 bytes, indiferent de numarulde zile de concediu introduse si astfelpentru fiecare inregistrare (fiecare angajat) se vor pierde 3 bytes. A:eesta este do~run exempludar puteti avea laun moment dat 0baza de date cu 10mi1i9ane deiniegistrari ~ia@lc~pierd~eaa 3 bytes fa fiecare inregistrare se traduce m cateva zeci de MB de spatiu,lata si tipurile de date inbazele de date MySQL, spatiul pe care II ocupa precum sivalorileminime i maxime pe care le pot avea.Valeri' numerlce:

    Tip Bytes Dela PanalaTINYINT 1 -128 127SMALLINT 2 -32768 32767MEDIUMINT 3 -8388608 8388607INT 4 -2147483648 2147483647BIGINT 8 -9223372036854775808 9223372036854775807Taitte tipurileTd6 mai sus au un atriburoptional (n1;Standard),UNSIGNED.tPutetl f61gsiacest atribut In definirea tipului de date al unei coloane atunci cand dorit i sa contina doarvalori pozitive. Un camp de tip TINYINT va putea coatine numere intre -128 si 127 in timpce alt camp, TINyINT UNSfGNED va putea avea valori intre 0 i 255. La fel, pentruSMAI;~JNT valorile sunt de Ii i -32768. pana la 32767 in tintP ce pentru SMALLll%TUNSIGNED ele pot fi litre Oi 65535.Daca intr-un camp TINYJNT care are valori intre -lZ8 si 127 yeti incerca sa introducetio valoare mai mica de -128 ea va fi convertita In cea rnai mica valoare admisa, -128. Dacav~tiip;ct)rca sa introduceti 0vatoare mai mare de 127.ceava flcollyertifii in cea mai marec'valoare admisa detipul campului, 127 in acest caz.

    Datiiltimp:Cot~mn typeDATETIMEDATETIMESTAMPTIMEYEAR

    Format'YYYY -MM-DD hh.rnm.ss' c,'YYYV-MM-DD'YYYYMMDDhhmmss'hh:mm:ss''yyyY'

    Tipul de camp TIMESTAMP ofera posibilitatea de a data automat operatiile de tip INSERT~i UPDATE. El este compus.implici t din 14 caractere pentru formatul 'YYYYMMDDhhmmss+dar putem sa specificarn la crearea]lllui tabel c~dorim sa contina maipupnecaractere:Timestamp

    Column typeTIMESTAMP(14)TIMESTAMP(12)TIMESTAMP(10)TIMESTAMP(8)TIMESTAMP(6)TIMESTAMP(4 )TIMESTAMP(2)

    Display format'(YYYMMDD~HMMSScVYMMDDHHMMSSYYMMDDHHMMYYYYMMDDYYMMDD.YVMMVY

    Strin~uri (strurf) '.. " ', Tipurile de string-uri In MySQL sunt BLOB, TEXT, GHAE;cV ARC1{AR, ENUK'f$iSET. illabelul unnator puteti vedea marimea maxima admisa pentru cele mai folosite dintreele precum si spatiul alocat pe disc pentru fiecare:Tip:TINYTEXT sau TINYBLOBTEXT or BLOBMEDIUMTEXT or MEDIUMBLOBLONGBLOB

    Bytes'255655351677721542949,67295

    Marime maxima2A8-12A16-1 (64K-1)2A24-1 (16M-1)2A3 .2 -1 (4G-l)

    Campul de tip BLOB poate contine 0 cantitate variabila de informatie, similar cu TEXTinsa diferit printr-un singur aspect: cautarea intr-un camp BLOB este case sensitive (se facedifert)nta intre majuscule si mjnuscule), iar intr-un cllinp TE~J;.p;]l este. ... . '. < iTipul VARCHAR este similar tipului TEXT cu deosebirea' ca intr-o polilana de tipV ARCHAR putem specifica numarul maxim de caractere admis. -

  • 5/12/2018 Chip Special 22003

    15/68

    cam cu celalalt tabel, in care stim sigur caam introdus date si sa vedem cum arataacestea:

    Acum putem vedea foarte dar struc-tura si continutul tabelului. Asteriscul *din SELECT * FROM carti este echiv-alentullui "tot/toate", iar comanda s-artraduce in limba romana "arata- mi tot dintabelul test". Asteriscul 11putem inlocuicu numele unui camp pentru a vedea doarcontinutul acelui camp. Astfel:

    ne v~ afisa doar continutul carnpului titlu:

    Putem selecta sa ne fie afisate maimulte coloane, specificate de noi, in oriceordine (nu neaparat in ordinea in care seafla in tabel), ca in interogarea urmatoareunde afisam coloanele titlu si autor:

    Putem afisa cartile pentru pentru carecampul descriere este gol astfel:

    descriere

    Avern suficiente date pentru a aflacateva utilizari noi si foarte interesanteale comenzii SELECT. Putem adaugaconditii de selectie si putem astfel alegesa ne fie afisate doar titlurile cartilor deMihai Eminescu, astfel:

    Sa afisam toate volumele de poeziidin baza de date, indiferent de autor.Daca executam interogarea:

    ne va retuma doar cartea al carui titlu estechiar .Poezii", neluandu-le pe celelaltein considerare:

    tabel). lata cum functioneaza LIKE siwildcardul %:

    Vor afisate toate inregistrarile in caretitlul cartii incepe cu cuvantul "poezii".

    MySQL trateaza toate valorile dintr-uncamp de tip TEXT ca fiind case-insensi-tive astfel incat nu va trebui sa tineti contde literele mari sau mici atunci cand vareferiti intr-o interogare la valoarea unuicamp. Comanda:

    va afisa toate inregistrarile in care titlulcartii se te~ina cu cuvantul "poezii":

    Folosind conditia titlu='Poezii' nu vorfi afisate volumele 2 si 3 din colectia depoezii de Mihai Eminescu si nici cartea

    intitulata "Fire de tort -Poezii" de Cosbuc. Dacavrem sa obtinem toatecartile care au cuvantul"poezii" 'in titlu putemface acest lucru inlocuindegalitatea cu operatorulLIKE si folosind wild-card-uri. Semnul cufunctie de wildcard intr-o

    ~ interogareMySQLeste%(semnul * cu care probabil sunteti dejaobisnuiti este definit in SQL ca insem-nand totitoate ~i l-am folosit deja atuncicand am utilizat SELECT * FROM carti

    volumele Poezii de Mihai Eminescu siFire de tort - Poezii de George Cosbuc.Similar,

    va afisa toate inregistrarile in care titlulcartii contine cuvantul "poezii" oriundein cadrul textului.Putem extinde comanda SELECT pen-

    trua adauga un nou criteriu de selectie,Daca dorim sa alegem toate cartile de

    poezii de Mihai Eminescu rara sa ne fieafisat siromanul scris de acesta sau carteade poezii a lui George Cosbuc, vomtrimite catre baza de date 0 interogare cudoua criterii: "returneaza-mi to ateinregistrarile unde autorul este MihaiEminescu si titlul cartii contine cuvantulpoezii".

    OH IP SPEOIA L - S IT E D IN AM IC

  • 5/12/2018 Chip Special 22003

    16/68

    Daca vrem sa alegem toate cartile carenu sunt scrise de Mihai Eminescu folo-sim operatorul de inegalitate'(semnul !=,opus lui =):

    Putem gasi toate titlurile cartilor pen-tru care campul descriere este gol astfel:

    Analog, folosind operatorul NOTLIKE putem alege toate cartile al carertitlu nu incepe cu litera P:

    Teme de rezolvat:- afisati toate titlurile cartilor de Wil-

    liam Shakespeare;- afisati toate titlurile care contin litera

    T oriunde in textul titlului;- afisati doar titlurile cartilor ale carer

    autori cu nurnele care setermina cu literaU;- afisati numele autorilor care nu se

    termina cu litera U;Putem folosi ORDER BY pentru a

    ordona rezultatele unei selectii, cresca-tor sau descrescator, in functie de coloa-na aleasa pentru ordonare.lata, spre exemplu, cum putem afisa

    CH IP SPEC IA L - S ITE D INA MIC

    autorii din tabel in ordine crescatoare:

    Putem avea mai multe criterii de ordon-are, ca in exemplul urmator unde ordona-rea se face dupa autor ascendent si, pentrufiecare autor, cartile sunt ordonate dupatitlu descendent:

    Putem afla cate inregistrari sunt pen-tru un criteriu de selectie cu ajutorul luicounu). Putem astfel afla cate inregis-trari avem in total in tabel:

    sau cate inregistrari sunt in tabel al carercamp 'autor' este Mihai Eminescu:

    Cu ajutorul instructiunii GROUP BYputem "grupa" rezultatele astfel incat sanu vedem duplicatele si sa vedem doarvalorile unice.Sa vedem, folosind GROUP BY ce

    autori avem si sa ii ordonam crescator:

    Pentru a limita numarul de rezultateretumate, folosim instructiunea LIMIT.Daca avem 10000 de inregistrari si nudorim sa vedem decat primele 3, folosimLIMIT in felul urmator:

    Daca dorim sa vedem inregistrarile dela 3 la 7:

    iar pentru inregistrarile de la lOla 15:

    Observam ca primul numar din LI-MIT este inregistrarea de la care se ince-pe afisarea sial doilea numar este numarulde inregistrari ce urmeaza a fi retumate.DELETEDELETE se foloseste pentru stergerea

    inregistrarilor dintr-un tabel (ne rea-mintim ca pentru stergerea tabelelor si abazelor de date se foloseste DROP). Sin-taxa lui DELETE este:

    Asa cum putem afisa doar inregis-trarile ce corespund conditiilor noastre,la fel putem conditiona si stergerea lor infunctie de criteriile specificate.

    afiseaza toate cartile deMihai Eminescu,in timp ce:

    va sterge din tabel toate inregistrarilepentru care campul autor este Mihai Emi-nescu, Iasandu-le pe celelalte neatinse.Observiim dona lucruri: asteriscul a dis-

    parut, el fiind inutil. MySQL va sterge unrand intreg la solicitarea dumneavoastra, elnu vaputea sa stearga (logic) 0 coloana saumai multe apartinand unei inregistrari.In al

  • 5/12/2018 Chip Special 22003

    17/68

    E D I T O R I A L I N T R O D U C E R E ) ) I N S T A L A R E ) ) O R G A N IZ A R E _ ) ) P H P

    doilea rand, cu aceasta exceptie, sintaxapentru stergere seamana ca doua picaturide apa cu sintaxa pentru selectie. La fel cain SELECT putem folosimaimulteconditiisi am putea sterge toate inregistrarile undeautorul esteMihai Eminescu si titlul cartiicontine cuvantul poezii".DELETE FROM carti WHEREautor='Mihai Eminescu' AND titluLIKE '%poezii%";

    DELETE FROM carti este echivalen-tul de stergere al lui SELECT * FROMcarti, adica va sterge toate inregistrariledin tabel. Nu 11vom pune in aplicare dareste bine de stiut.

    UPDATEAtunci cand vrem sa modificam

    continutul unei inregistrari nu este nevoiesa 0 stergem si sa 0 adaugam in variantanoua, putem folosi UPDATE care areurmatoarea sintaxa:UPDATE tabel SET coloanal='noua

    valoare a coloanei 1',coloana2= 'noua valoare acoloanei 2' WHERE conditii

    UPDATE modifica continutul unuia saumai multor campuri infunctie de conditiilespecificate. Sa modificam, de exemplu, incoloana autor toate inregistrarile MihaiEminescu sisa leinlocuim cuM. Eminescu:UPDATE carti SET,.utor=' M. Emines-cu' WHERE autor='Mihai Eminescu' ;

    Executati SELECT * FROM carti pen-tru a observa modificarea.Conditiilepot fiextinse lafelca insintaxa

    SELECT. In urmatoarea interogare vommodifica campul descriere ale tuturor inreg-istrarilor al carer titlu contine cuvantul"poezii" si campul descriere este gol:

    UPDATE cart:L SETdescriere='Carte de poezii'WHERE titlu like '%poezii%'and descriere=";

    Astfel, toate carlile rara descriere alcarer titlu continea cuvantul poezii auacum descrierea Carte de poezii.ALTER TABLEALTER TABLE ne permite sa schim-

    bam structura unui tabel existent. Putem

    adauga sau sterge coloane ~i indecsi,putem redenumi coloane sau chiar tabe-lui in sine si putem schimba tipul de datecontinut de 0 coloana. Sa adaugam 0coloana, data, in care sa stocam dataadaugarii cartii in baza de date. Campuldata al tabelului carti ne va fi util atuncicand vom afisa vizitatorilor noutatile dinmagazin peprima pagina. Elnu corespundedatei la care a fost editata cartea ci datei incare aceasta a ajuns pe rafturile virtuale alemagazinului nostru. Cele mai noi 10titluridin librarie le-am afla astfel foarte usorfolosind urmatoarea interogare:

    titlu FROM carti ORDER BYdata DESC LIMIT 0,10;

    Sa adaugam noua coloana, la sfarsitultabelului:ALTER TABLE carti ADD dat TEXT;

    Am scris gresit numele coloanei, sa 0redenumim din "dat" in "data":ALTER TABLE carti

    CHANGE dat data TEXT;

    Ne aducem aminte ca exista tipulDATE si ca 0 data cum e 12-12-2003 ne-ar putea fi mai utila daca s-ar afla intr-ocoloana de tip DATE decat intr-una detip TEXT asa ca vom modifica tipul dedate al noii coloane:ALTER TABLE carti

    CHANGE data data DATE;

    Ca sa adaugam 0 coloana altundevadecat la sfarsit, intre descriere si data spreexemplu, folosim ALTER TABLE infelul urrnator:

    carti ADDMEDIUMINT UNSIGNEPAFTER descriere;

    INDEC~ICel mai folosit tip de index este id-ul.

    Id-ul este un numar unic de identificarepentru un element distinct (un rand) alunui tabel. Avandstructura tabelului cartiin forma actuala, pentru a alege "Romeosi Julieta" de William Shakespeare, in-terogarea ar arata in felul urmator:SELECT * FROM carti WHERE

    autor='William Shakespeare'AND titlu='Romeo si Julieta';

    ) ) A D M IN I S T R A R E " T I P S & T R I C K S

    Ce ne facem insa daca implementaminterogarea in aceasta forma in aplicatiesi intr-o buna zi primim spre vanzareaceeasi carte dar cu un pret diferit? Artrebui sarescriem interogarea pentru a neadapta situatiei ~i atunci cautarea uneicarti ar fi facuta cu interogarea:SELECT * FROM carti WHERE

    autor=' William "Shakespeare'AND titlu='William Shakespeare'AND pret=100000;

    Daca am folosi un camp care sacontinaun numar unic de identificare pentrufiecare carte cautarea ar fi mult simplifi-cata:SELECT * FROM carti WHERE

    id_carte=15;

    Un exemplu de id din viata reala imivine in minte: ati fost vreodata la uncentru de inchiriat casete video? Vaamintiti ordinea in care erau puse casetelein rafturi? Un patron de centru de inchir-ieri numeroteaza fiecare casetanou primi-ta si 0 pune la coada, in ordinea numer-otarii, nu va cauta sa vada unde ar intradin punct de vedere alfabetic, mai ales catitluri precum "The Firm" ar putea fipuse si sub litera F si sub litera T, dupacum considera fiecare, si atunci confuziaar fi ~i mai mare. In plus ca sa adaugetitluri noi in lista de casete disponibile nuva trebui sarescrie toata lista, civaadaugadoar titlurile noi la coada, in ordineanumerotarii, Dumneavoastra puteti ast-fel sa aflati rapid ce e nou doar aruncandoprivire peultima pagina aofertei. Atuncicand cereti 0 caseta intr-un centru deinchirieri specificati vanzatoarei numarulsub care se gaseste titlul in lista, altfel eii-ar lua cateva minute bune sa caute unfilm anume din cateva sute. Intr-o bazade date id-ul serveste aceste functii la felca in viata de zi cu zi.Samodificam tabelul carti astfel incat

    fiecare carte sa aiba un id unic:SET INSERT_ID=4I;ALTER TABLE cart~iADD id_carte INT

    UNSIGNED NOT NUL~ AUTO,_INCREMENTFIRST, l\DD id_parte) ;

    SET INSERT ID=# este folosit capentru fiecare carte deja adaugata sa fiepus un id unic. De asemenea, pentrutoate cartile ce le Yeti adauga de acuminainte va exista un id unic, incrementatautomat.

    CH IP SPEC IA L - S IT E D IN AM IC

  • 5/12/2018 Chip Special 22003

    18/68

    E D I T O R I A L ) ) I N T R O D U C E R E ) ) I N S T A L A R E ) ) O R G A N IZ A R E ) )_ P H P ) ) C R E A R E S I T E ) ) A D M IN I S T R A R E ) ) T I P S & T R I C K SSii ne folosim de index pentru a exe-

    cuta operatii in tabel:("un

    SELECT i d c art e, t it lu FROMc art i;Valoarea id carte a acestei ultime in-

    registriiri este 9. 0 folosim pentru a efec-tua modificiiri:

    mo di fi ca t' WHERE i d_c art e=9;t it lu FROM c arti

    modificat

    NormalizareaNormalizarea inseamna structurarea

    tabelelor bazei de date in asa fel incatdatele din acestea siiocupe cat mai putinspatiu pe hard disc, fiind astfel deosebitde utilii. Chiar dad spatiul nu poatepiirea 0 problemii, trebuie sii luati inconsiderare posibilitatea de a fi nevoit siivii extindeti intr-o zi peste numiirul demegabiti oferit de contractul incheiat cuISP-ul, din lipsii de spatiu. De ce siiplatitimai mult cand puteti sii normalizati?Normalizarea este 0 practicii bunii si viirecomand sii 0 luati in calcul ori de cateori faceti 0 baza de date.Sii studiem pentru un moment tabelul

    carti albazei noastre de date. Inmomentulde fata el este structurat in felul urmiitor.

    Ipretdatam ed iu mi n t(8 ) u n si gn e d Ida te I

    Ce s-ar intampla dacii am avea toatecartile scrise de Isaac Asimov? Numiirulacestora depaseste 400 si coloana autorar contine de tot atatea ori textul "IsaacAsimov". Ce putem face este siicreiim unnou tabel pentru autori cu douii campuri:id_autor si nume_autor si sii inlocuirncampul text autor din tabelul carti cu uncamp nurnit tot id_autor in care pentrutoate cartile unui autor siipunem id-ul dintabelul de autori. In acest mod campul vacontine un numiir din cateva cifre in loc deC HIP SPEC IA L - S ITE D IN AM IC

    un text mult mai lung. Dacii scriem intr-undocument text numele "Isaac Asimov"vedem ciiacesta ocupii 12bytes in timp ceun numiir din 3 cifre (presupunand cii id-ul autorului ar ficompus din 3 cifre) ocupiidoar 3. Astfel inlocuind elementele repe-titive dintr-un tabel cu un id facem 0economie serioasii de spatiu.Sii facem, deci, un nou tabel: autori,

    CR.E.f\T_E;.,TABLEutori{ id _a u to r S MA LL IN T U NS IG NE DDEFAULT '0' NOT NULLAUTO_INCREMENT,n um e_!>u t or TEXT,P RI MA RY K EY (i d _a u t o r) ,U NI QU E ( id _a u to r) ,I ND EX (i d _a u t o r) ) ;

    ~isiiredenumim campul autor din tabelulcarti in id autor.ALTER TABLE c art i CHANGE a u t or

    i d_a ut or TEXT;Nu ii vom modifica deocamdatii tipul

    de date pe care il contine . .\\r trebui siirevenim ulterior la tabelul autori, siiciiutiim id-ul corespondent fieciirui autorsi sii modificiim manual fiecare camp inparte. IVom reduce numii~l de operatii nece-

    sare cu ajutorul functiei UPDATE.Adiiugiim intai autorul.innoul tabel, aflamid-ul unic repartizat de ciitre MySQL ~iapoi inlocuim in tabelul carti numeleautorului cu acest id.INSERTb~NTO a ut ori va l'u es(" ,

    ' Mi h ai E mi n e sc u ') ;SELECT * FROM a ut ori WHERE

    M iha i E rr un e e c u " s-----------------t+id a u t or n ume a u t or_

    + +1 Mihai Em.i.ries ou+ +

    --~~--~-------t-----------------t

    UPDATE c art i SET id a u t or=l WHEREi d _a u t o r= ;i M ih a i E mi n e sc u '

    INSERT INTO a ut ori va lu es(" ,' Ge o rg e C os bu c ') ;

    SELE.CT * FROM' a u t or i ;+ t +I id a u t or n ume a u t or It + tI 1 I r:1ihaiEminescu II 2 I George Cosbuc I+ t +

    S ET i d _a u t o i: =2 W HE REi d_ au t or =' Ge o rg e C os bu c ';

    Tema: procedati in acelasi fel cufiecare nume de autor din tabelul carti .Acum cii avem id-uri numerice in loc

    de nume in coloana id_autor, sii modi-ficiim tabelul carti si sii transformiimtipul campului id autor din TEXT inSMALLINT:ALTER TABLE c art i CHANGE id a u t orid a u t or SMALLINT NOT NULL;Cele douii tabele aratii acum asa:

    autor i :+ +i d_a u tb rl ' n ~m e a u tO rt +------~~------~

    1 J Mi ha i Emi ne sc u2 I Ge orge Cosbu cI W i ll i am4 I Ale xa ndru Mi tru

    Ii d_ au t or I t i tl u+--------+-------~-----------+

    3lHamlet;1 1 P6eziiIIPo ez ii , vo lu mu l 2IIPo ez ii , vo lu mu l 34 IL e ge n de l e O li m pu l ui2 IFire de ' - Po e z i i I1IGen i u pust i u I31Rome o si Juli e t a I

    t-------t--------------------tPutem "uni" dateledin cele douii tabele

    astfel incat sii ne fie afisate numele ~ititlul pentru fiecare inregistrare:SELECT n ume _a ut or, t it lu FROM

    a ut ori , c art i WHEREautori.id_autor=Gar~i.id~autor;

    ~--~--------+--------------Ititlunumejaut o.r+.--------------.~-------------+I Wi ll iam Shakespeare I HamletI MihaL anc.cescc II Mih~d. I'.I Mhai II Alef6'nd.ruMtru II Geo;rgeCosbuc IJ Mihai Eminescu I Geniu

    Aceastii interogare ia coloananume_autor din tabelul autori si coloanatitlu din tabelul ciirti si le asociazii dupii id-ul autorului care este unic. Daca una dincoloanele pe care.vrem sii le afisam areacelasa nume in cele douii tabele, 0putemapela ca nume_tabe1.nume_coloanii ast-fel incfit sii nu existe ambiguitati:S EL EC T a u to ri . i d~ au t or ,

    num!iUmtor IiFROM a ut ori , ca rt iautori.id__utor~carti.id_autor;In aplicatia noastrii va trebui sii avem

    cartile ordonate dupii domenii. Nu vom

  • 5/12/2018 Chip Special 22003

    19/68

    E D I T O R I A L ) ) ) ) I N S T A L A R E n .. O R G A N I Z A R E ) ) _ ) ) P H P ) ) C R E A R E S I T E ) ) A D M I N I S T R A R E ) ) T I P S & T R I C K S

    + + + +id a u t o r nume a u t o r titlu+ + +liam Shakesp~are Ha mleti Em.i.ne's cu ..ai ..Emi ne sc u vo lumul )2. volumul 3i ha i Emi ne sc u ii,

    4 Ale xa ndru Mi tru Leg~ndele Olimpului2 Georg,e Cosb\lc Fire de to rt - Poezii1 ' Mi ha i E mi n e sc u Geni.u pustiu+ + + +

    amesteca romanele de razboi cu manu-alele scolare sicu poeziile! Ne va trebui inconsecinta 0noua coloana in tabel, pentrudomeniul cartii: Legendele Olimpului vorapartine domeniului .Povesti", cartile depoezii domeniului Poezii si asa mai de-parte.Tema: modificati tabelul carti pentru a

    adauga 0 coloana id_domeniu si creati unnou tabel domenii cu doua campuri:id_domeniu sinume _domeniu. Adaugatinumele de domenii pentru cartile din bazade date si id-urile acestora in tabelul carti,conform cu id-urile din tabelul domenii.Tema: afisati titlurile cartilor din baza

    de date si domeniile de care acesteaapartin (ca in exemplul de mai sus, cutabelul autori):+ +r:c----"--c:c-----+In u me _ do m en i u l t i t lu+-----+------,,-----+ITeatru IHamlet

    Deocamdata avem in baza de datetabelele carti , autori si domenii. In con-tinuare va trebui sa mai adaugam unul.Ne reamintim ca la fiecare carte vizita-torii nostri au posibilitatea sa-si poataimpartasi impresiile. Pentru aceasta vomcrea un nou tabel, comentarii, ale caruicampuri nu Ie voi mai descrie deoarecenumele si tipullor sunt de ajuns de clare:CREATE

    id co me nta ri u INT UNSIGNEDDEFAULT '0' NOT NULLAUTO_INCREMENT,id c arte INTUNSIGNED DEFAULT '0',n ume ut iliz ato r TEXT,adre sa ema il TEXT,

    I ND EX ( id _c o me n t ar iu )) ;

    Campul id_carte din acest tabel ne va

    folosi pentru a afla toate comentariileaferente unei carti, cu ajutorul interogarii

    c ome nt ari i WHERE'i

    Pentru urmarirea vanzarilor YOmfo-losi doua tabele, tranzactii si vanzari. Sapresupunem ca Pop Ion cumpara douacarti in 1marti e sirevine pentru a cumparainca alte trei carti in 2 martie. In data de3 martie cand Yin banii pentru primacomanda noi vom sti ca trebuie sa trimi-tern niste carti lui Pop Ion dar nu stimexact care! lata de ce, pentru fiecarecomanda, indiferent de numarul cartilorcerute, va trebui sa folosim un numarunic de identificare, numar pe care 11tinem in tabelul tranzactii alaturi de cele-lalte informatii care ne intereseaza:CREATE TABLE tran zac ti i (

    i d_t ia nz ac ti e INT u nsi gn ed} / .O TN UL L a u t o _ i n c re m e nt ,o:'~t",;i_'tranzacde'TTMESTAMP

    'kNULL,n u me _c u mpa rq _t o r T EXT NOT N UL L,a dr esa _c u mpa ra t or T EXT NO T NUL L,UNIQUE KEY i d_t ra nz ac ti e(id_tranzactie));

    Am setat campul data_tranzactie caTIMESTAMP(IO) pentru ca astfel el vaputea fi setat automat deMySQL la fiecarenom inregistrare siva contine data inserariiinregistrarii in format YYYYMMDD.Executati urmatoarele doua interogari:INSERT INTO t ra nz ac ti i

    (nume_cumparator,adresa_cUffiParator)VALUES ('Pop'I on ', ' st r. Lu n ii 1 2, Br as ov ');

    SELECT * F RO M t ra n z ac t i i;Tabelul vanzari va contine informatiile

    despre cartile vandute in fiecare tranzactie:

    i nt u nsigned NOTNULL de fa ult '0',id c arte int u nsign ed NOT NULL

    def ault '0',n r_bu c t in yi nt NOT NULL de fa ult'0') ;

    Campul id_tranzactie corespunde ce-luidin tabelul tranzactii iarcampul id_cartecelui din tabelul carti. Campul nr_buc neva servi atunci cand un utilizator cumparamai multe bucati din aceeasi carte intr-otranzactie si de asemenea pentru a puteaface statisticile pentru cele mai vandutecarti. Introduceti catevainregistrari in tabelfolosind id_tranzactie din tabelul tranzac-tii si mai multe id_carte din tabelul carti:I NS ER T I NT O v a n ~a r 'i V A LU ES ( 1,2 , 1 );I NSE RT I NT O v an z ari V AL UE S ( 1,3 , 1) ;I NS ER T I NT O v a n z ar i V AL UE S ( 1,4 , 30 );

    In tranzactia cu id_tranzactie Is-auvandut: 1 carte cu id_carte 2, I carte cuid carte 3 si 30 de carti cu id_carte 4.-Am invatat in acest capitol cum safacem 0 baza de MySQL date si cum salucram cuea pentru a obtine datele de careavem nevoie. Inainte de a trece la capito-lul urmator fnsa trebuie sa va spun ca peCD Yeti gasi cativa clienti vizuali pentruserverul MySQL cu care va Yeti puteaconstrui structura bazei de date mult maiusor. V-am "chinuit" cu sintaxa in linia decomanda deoarece mai tarziu, cand vomlucra cu baza de date prin intermediulPHP, va finecesar sa stim cum se introducsau se extrag date folosind comenzi SQL.In continuare vom invata bazele pro-gramarii PHP urmand ca apoi sa folosimcunostintele acumulate in aceste doua cap-itole pentru a obtine informatii din baza dedate prin intermediul PHP si a le afisautilizatorilor intr-o pagina de web.

    Marimea conteaza?cat de mare I'oat~~~~in ! a b e l ? ,iMySQL stbcQeaz.afiZi? datele unuitabel intr-un fi~ier pe'hard disc ~i eu eattabelul este mai mare, eu atat marimeaaeestui fisier creste, Versiunea 3.22 aMySQL are 0 limita de 4GB pentrumarimea unui tabel.Inversiunile superio-are aceasta limita este extinsa pana la 8milioane TB pentru tipul de tabel My-ISAM. Cu toate acestea, sistemele de ope-rare pot avea propriile l imitari ale marimii Ifisierelor. M1irim~a, ir n UClt~a tabelelor,

    IMySQL este dea .~tiV;;4GB. Puteti:fve.r:ifieatnarimea m . Iipenttu un taqeI'eu ajutorul eomenzilor SHOW TABLESTATUSsaumyisamehk-dvtable_name.Pe platforma Windows va trebui safolositi sistemul de fisiere NTFS dacadorit i 'sa aveti tabele mai mari de 4GB.

    C HIP SPEC IA L _ S IT E D IN AM IC

  • 5/12/2018 Chip Special 22003

    20/68

    Variabile

    I N T R O D U C E R E I I I N S T A L A R E O R G A N IZ A R E I I M y S Q L I I I I C R E A R E S I T E I I A D M IN IS T R A R E I I T I P S & T R I C K S

    PHPProgramare pentru totlCa limbaj de programare, PHP este foarte usor de invatat dacaelementele programarii sunt explicate pe intelesul tuturor. Acestaeste unul din scopurile articolului de fata: de a initia orice novice intainele programaril PHP. Datorita similaritatii intre limbajele deprogramare de uz com un, cunoscand PHP va fi floare la ureche satreceti apoi la VBScript, Java sau chiar C. Nu i-am uitat peprogramatorii experimentati in alte limbaje care vor afla in acestcapitol parncularitatile PHP.

    pHP este limbajul ideal pentru con-struirea de pagini web dinamice.

    Este usor de invatat, open-source, poate firulat pe mai multe platforme ~i se poateconecta lamai multe tipuri de baze de date.Cel mai important aspect allimbajului

    este insa posibilitatea de a fi imbricat cucod HTML. Putem astfel crea paginiHTML statice ~i din loc in loc, acolounde este nevoie, sa introducem dina-mism cu ajutorul PHP. Sa luam primapagina a site-ului www.chip.ro de exem-plu. Mare parte din strnctura sa este com-pusa din cod HTML static (meniurile,tabelele, aranjamentul In pagina). Dinloc in loc codul HTML este intercalat cucod PHP care extrage din baza de datecele mai noi stiri, In momentul in careapelati pagina, acest cod este parsat (anali-zat linie cu linie si executat) pe server sieste afisata 0 pagina HTML lara sa stitica pentru crearea ei s-a facut 0 conexiunela baza de date, s-au extras informatiilede acolo siau fost ordonate pentru afisare.P e l o c u r i . . .Limbajul PHP s-a "nascut" in 1994

    din nevoia lui Rasmus Lerdorf de a aflacate persoane ii vizualizeaza CV-ul on-line. El a denumit setul de scripturi createPHP, acronimul pentru Personal HomePage. Pe parcursul urmatorilor trei anilimbajul a evoluat dar adevaratul succesa inceput sa il cunoasca de cand ZeevSuraski ~i Andi Gutmans au rescris mo-torul PHP de la cap la coada, motor carepoarta din versiunea 4 a PHP numeleZend, 0 combinatie de litere din prenu-mele creatorilor sai: Zeev si Andi.Fiind open-source, PHP beneficiazade suport activ din partea comunitatiionline, acesta fiind si motivul cresteriiCH IP SPEC IA L _ S ITE D INA MIC

    explozive a numarului site-urilor bazatepe PHP. Intre 2000 si 2002 numarul lor acrescut cu peste 13130% in timp cenumarul site-uri lor bazate pe tehnologiaASP doar cu 278%, Java Server Pages cu1594% ~i ColdFusion cu 429% ..Pe langa manipularea continutului

    paginilor deweb, PHP poate trimite head-ere HTTP pentru autentificare, seta cook-ie-uri sau redirectiona utilizatorii. Maimult, cu ajutorul bibliotecilor exteme defunctii poate parsa fisiere XML, crea simanipula imagini, animatii ShockwaveFlash, PDF -uri sau se poate conecta la unserver de mail iar acestea sunt doar cate-va din functiile pe care le poate indeplini.Fiti gata...In continuare va voi indruma prin ele-

    mentele de baza ale PHP. Asezati-vaconfortabil, deschideti un editor de text,asigurati-va ca serverul web este pomit sipuneti-va centurile de siguranta, Vareco-mand sarulati chiarvoi exempleleprezen-tate in continuare deoarece asaYetiintelegefoarte usor cum functioneaza PHP la ser-ver si care este rezultatul In browser.Puteti folosi orice editor de text. Note-

    pad este bun pentru inceput dar putetialege sa folositi unul din editoarele PHPde pe CD. Salvati fisierele cu extensiaphp, in document root (c:\ProgramFiles\Apache Group\Apache\htdocs\) siIe Yeti accesa in browser la adresa http:!/localhost/numefiJier.php.Start!Program area de orice fel, nu doar PHP,are doua elemente de baza: datele si

    instructiunile. Pentru a lucra cu dateletrebuie sa intelegem ce sunt variabilele si

    tipurile iar pentru a lucra cu instructiunitrebuie sa aflam ce sunt structurile decontrol si functiile.

    o variabila este 0 zona de memoriecaruia i se da un nume pentru a putea firecunoscuta ulterior si pentru a ne puteareferi mai tarziu la ea. Sa ne imaginam calonel siGigel au urmatoarea conversatie:lonel: Poti aduna doua numere?Gigel: Da. Care este primul numar?lonel: Primul numar este 3. Al doilea

    numar este 2.Gigel: Rezultatul adunarii este 5.Toate cele trei numere din conversatia

    de mai sus Ie putem considera variabile.Gigel tine minte valoarea primului numar,2, apoi tine minte valoarea celui de-aldoilea numar, 3, dupa care Ie aduna ~iobtine rezultatul: 5. Discutia ar puteacontinua in felul urmator:lonel: Cel de-al doilea numar este

    acum 6. Care este rezultatul adunarii?Gigel: Este 9.lonel a schimbat valoarea celui de-al

    doilea numar, rezultatul fiind de aceastadata 9. Putem considera numerele re-spective ca fiind variabile ~iatunci codulPHP pentru prima adunare ar fi:$ pri rn ul_n urn ar ~ 3;$al_do ilea _nu rn ar ~ 2;$total = $prirnul_nurnar+

    $al_doilea_nurnar;

    Valoarea variabilei Stotal este sumacelor doua numere, 5 in acest caz. La adoua operatic de adunare Gigel tine mintedeja valoarea primului numar, schimbavaloarea celui de-al doilea si obtine unnou rezultat:$al_do ilea _nu rn ar ~ 6;$total = $prirnul_nurnar +

    $al_doilea_nurnar;

    Valoarea variabilei $total se schimba,deoarece am schimbat unul din elemen-tele ecuatiei, Intelegem acum de ce limntnumite variabilele asa: pentru ca valoar-ea lor poate fi schimbata ori direct, cumam schimbat in a doua operatic valoarealui $al_doilea_numar din 3 in 6, ori ca

    http://www.chip.ro/http://www.chip.ro/
  • 5/12/2018 Chip Special 22003

    21/68

    E D I T O R IA L ) ) I N T R O D U C E R E I N S T A L A R E II O R G A N I Z A R E II M y S Q L II I I I ) ) C R E A R E S IT E . II A D M I N I S T R A R E II T I P S & T R I ( K Sunnare a dependentei lor de alte vari-abile, asa cum se schimba valoarea vari-abilei $total in functie de valorile lui$primul_ numar si $al_ doilea _numar.Pentru a intelege mai bine conceptul

    de variabila, putem face 0 comparatie cualgebra. Dad luam un numar x ~i ii damvaloarea 1, x+l=l, x+2=2. Daca x=7,x+ 1=8 si x+2=9. Analog, putem scrieurmatorul cod PHP intr-un fisier numitalgebra.php:

    Salvati fisierul in document root (di-

    rectorul c:\Program files\ApacheGroup\Apache\htdocs\) ~i accesati http:!Ilocalhostlalgebra.php. lata cum va ara-ta pagina afisata:

    VariabileRezulta tul aduner ii lui I cu I s t. 2Rezul tatul aduneri i lui 7 cu2 este 8

    Rezultatul rularil in browser afiieruluialgebra.php

    Sa disecam codul pentru a invata cate-va lucruri:_ toa te instructiunile PHP se termina

    cu punct si virgula. Omiterea sernnului"punct si virgula" este cea mai frecventagreseala pe care 0 fac programatorii in-cepatori._ codul PHP incepe intotdeauna cu . EI poate fiimbricat cu

    e a

    cod HTML dupa cum puteti vedea inexemplul alaturat. Puteti chiar crea pagi-ni HTML T a r a pic de cod PHP in ele si sale dati extensia php. Atata vreme catparser-ul PHP nu .vede" tagurile ,el va trimite pagina HTML neschimbatacatre server._ putem pune diacritice in cadrul unui

    string insa pentru ca browserul sa Ieafiseze corect va trebui sa specificam in setul de caractere folosit, la fel caintr-un document HTML._ valoarea unei variabile poate fi

    schimbata "dupa necesitati (asa cum amschimbat valoareaIui $x) sau ea va fischimbata automat in functie de celelaltevariabile de care depinde (asa cum valoar-ea lui $rezultat s-a schimbat in functie devaloarea lui $x)._ pentru a afisa rezultatul folosim

    print, altfel valorile variabilelor ar fifostschimbate dar nu ar fi fost afisate peecran. Pentru mai multe detalii privindfolosirea lui print va recomand saconsultati oglinda alaturata,

    _ linia de text care incepe cu II nu esteafisata, la fel ca textul demarcat de 1 * . .. * I sinu apar nici macar daca da m View Source mbrowser pentru fisierul algebra.php accesat.Acestea sunt comentarii care nu sunt proce-sate de catre server ca fund cod executabil sinici nu sunt trirnise mai departe catre brow-ser.In aplicatiile mai mari de catevalinii esteuti! sa comentam codul pentru a ne orientamai bine sau a explica actiunile intreprinse.Diferenta intre cele doua notatii este ca IIeste folosit pentru a comenta 0 singura liniede textin timp ce 1*. . .*1poate fifolosit pentru. a delimita un comentariu ce se extinde pemai multe l ini i. Marcatori i de comentariu sepot folosi si atunci cand dorim ca 0bucata decod sa nu ruleze. Puteti sa testati acest lucrucomentand una din liniile care contininstructiunea print si ruland din nou pagina.Numele variabilelor trebuie sa contina

    doar l itere (a-z, A-Z si caracterele ASCII dela 127 la 255), cifre si liniute de subliniere(underscores) sipot incepe doar cu litere sauliniute de subliniere. Astfel, $0_variabila,$_altaVariabila si $_inca_0_v