Documente Academic
Documente Profesional
Documente Cultură
INTRODUCERE
Pagina 1 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Capitolul 3 – Baze de date şi SQL prezintă noţiunile de bază legate de bazele de date
relaţionale şi este descris pe scurt principalul limbaj de interogări folosit în prezent, SQL. De
asemenea, este prezentat modul de creare a unei baze de date relaţionale şi sunt definite
noţiuni ca: relaţie , cheie primară, cheie externă, normalizarea tabelelor.
Pagina 2 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
I. INTERNET-UL
I.1. INTRODUCERE
Majoritatea site-urilor web sunt constituite din informaţii statice, dar Web-ul este un
mediu puternic şi este capabil de mult mai mult şi oferă caracteristici precum: pagini Web
dinamice, conectare la baze de date, pagini personalizate pentru utilizatori, colecţii şi
prelucrări sofisticate ale datelor, interacţiuni de poştă electronică, interfeţe pentru utilizatori
bogate şi atrăgătoare.
I.1.1 Internet-ul
Pagina 3 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Pagina 4 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Internet-ul în sine este o masivă reţea de comunicaţii şi oferă foarte puţin majorităţii
utilizatorilor, din acest motiv au fost necesari 20 de ani pentru ca Internet-ul să devină
fenomenul din prezent.
Internet-ul a fost ridicat la rangul de Information Superhighway şi această analogie
este destul de precisă. Autostrăzile nu sunt aşa de atractive precum locurile în care se poate
ajunge călătorind pe ele şi acest lucru este valabil şi pentru Internet. Ceea ce face Internet-ul
aşa de atrăgător sunt aplicaţiile care rulează pe baza sa şi ceea ce poate fi realizat cu ajutorul
acestora.
Cea mai cunoscută aplicaţie din prezent este World Wide Web. Mulţi oameni
confundă Internet-ul cu World Wide Web, lucru complet greşit.
Toate aplicaţiile pentru Internet folosesc protocolul IP pentru a comunica. Informaţia
transmisă de aceste aplicaţii este împărţită în pachete, mici blocuri de date, care sunt trimise
unei adrese IP destinaţie. Aplicaţia de la capătul celălalt procesează informţiile primate.
Câteva din aplicaţiile pentru Internet sunt:
Email – SMTP (Simple Mail Transfer Protocol) este cel mai cunoscut mechanism de
transmitere a mesajelor de poştă electronică, iar POP (Post Office Protocol) este interfaţa cea
mai utilizată pentru accesarea mesajelor.
FTP – File Transfer Protocol este folosit pentru trasferul fişierelor între calculatoare.
IRC – Internet Relay Chat permite susţinerea de conferinţe în timp real, bazate pe
text, prin Internet.
NFS – Network File System este folosit pentru a partaja fişiere între diferite
calculatoare.
Newsgroups – liste de discuţii bazate pe thread-uri.
Telnet – folosit pentru conectarea la un calculator de la distanţă.
VPN – Virtual Private Networks permite accesul sigur al reţelelor private la Internet.
WWW – World Wide Web.
I.1.3 DNS
Pagina 5 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Un intranet nu este nimic mai mult decât un Internet privat. Cu alte cuvinte, este o
reţea privată, de obicei un LAN sau WAN, care permite folosirea aplicaţiilor Internet-based
într-un mediu sigur şi privat. Ca şi pe Internet-ul public, intranet-urile pot găzdui servere de
Web, servere FTP sau orice alte servicii bazate pe IP.
Un extranet este o reţea de tip intranet care conectează mai multe site-uri sau
organizaţii folosind tehnologii legate de intranet. Multe extranet-uri, de fapt, folosesc
Intranet-ul ca backbone şi utilizează tehnici de criptare pentru a asigura securitatea datelor
transmise prin reţea.
Cele două lucruri care deosebesc intranet-urile şi extranet-urile de Internet sunt cine le
poate accesa şi de unde pot fi accesate. Dacă o aplicaţie poate rula pe Internet, atunci va rula
cu siguranţă şi pe in intranet sau extranet.
Pagina 6 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
World Wide Web este construit pe baza unui protocol numit Hypertext Transfer
Protocol (HTTP). HTTP este un protocol mic şi rapid care se potriveşte foarte bine sistemelor
informatice multimedia şi distribuite şi salturilor între site-uri.
Web-ul constă în pagini cu informaţii de pe gazde care rulează software de tip server
Web. Gazda este de multe ori identificată cu serverul Web, lucru care nu este corect. Serverul
Web este un software, nu calculatorul în sine.
Un Web server este un program care furnizează pagini Web la cerere. Când un
utilizator de la o adresă IP specifică solicită un anumit fişier, serverul Web încearcă să obţină
acel fişier şi să-l trimită înapoi utilizatorului. Fişierul solicitat poate fi codul sursă HTML al
unei pagini Web, o imagine GIF, un fişier Flash, un document XML, sau un fişier AVI.
Browserul Web este cel care determină ceea ce trebuie cerut, nu serverul Web. Serverul doar
procesează cererea.
Conexiunile la serverele de Web se stabilesc pe măsură ce sunt necesare. Dacă este
cerută o pagină de la un server Web, o conexiune IP este stabilită prin Internet între gazda
solicitantă şi gazda pe care rulează serverul Web. Pagina Web cerută este transmisă prin acea
conexiune, iar aceasta este întreruptă de îndată ce pagina este primită. Dacă pagina primită
conţine referinţe la alte informaţii ce trebuie descărcate (de exemplu, imagini GIF sau JPG),
fiecare va fi obţinută folosind o nouă conexiune.
Pe un acelaşi host pot rula mai multe aplicaţii de Internet, de exemplu un server Web,
un server FTP, un server DNS şi un server de mail SMTP POP3 pot rula în acelaşi timp.
Fiecărui server îi este atribuit un port pentru a asigura că fiecare server va răspunde numai
cererilor din partea clienţilor corespunzători.
Majoritatea serverelor folosesc un set de porturi predefinite. Serverele Web folosesc
de obicei portul 80, dar acesta poate fi schimbat. Pot fi instalate pe porturi nestandard pentru
a fi ascunse, şi de asemenea, pot fi instalate mai multe servere Web pe un singur calculator
asociindu-le porturi diferite.
Pagina 7 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Informaţiile din World Wide Web sunt stocate în pagini. O pagină poate conţine
oricare din următoarele: text, header-e, liste, meniuri, tabele, formulare, elemente grafice,
script-uri, stiluri (style sheets), obiecte multimedia.
Paginile Web sunt realizate folosind o serie de tehnologii pe partea de client şi sunt
procesate şi afişate de către browsere.
Browserele web sunt programe client folosite pentru a accesa site-uri şi pagini Web.
Sarcina unui browser este de a procesa paginile Web primite şi de a le prezenta utilizatorului.
Browser-ul încearcă să afişeze grafice, tabele, formulare, text formatat şi orice conţine
pagina.
Cele mai cunoscute browsere web din prezent sunt Netscape Navigator şi Internet
Explorer.
I.3.1. HTML
Paginile Web sunt fişiere cu simplu text costruite folosind limbajul Hypertext Markup
Language (HTML). Acesta este implementat ca o mulţime de tag-uri uşor de învăţat. Autorii
paginilor Web folosesc aceste tag-uri pentru a marca paginile de text, iar browserele le
folosesc pentru a randa şi afişa informaţiile pentru a putea fi vizualizate. Paginile Web pot să
conţină legături hypertext la alte pagini.
Pagina 8 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
I.3.2. JavaScript
Majoritatea browserelor noi permit folosirea şi a altor tehnologii, dintre care cele mai
importante sunt:
CSS (Cascading Style Sheets) – oferă o modalitate de a separa prezentarea de conţinut
astfel încât ambele să poată fi refolosite şi modificate cu uşurinţă.
DHTML (Dynamic HTML) – o combinaţie de HTML, script-uri şi CSS care folosite
împreună, pot realiza interfeţe pentru utilizator foarte atractive şi interactive.
Appleturi Java – mici programe care rulează în browser.
Macromedia Flash – o tehnologie inclusă în 98% din browserele existente, care oferă
un mecanism pentru crearea unor interfeţe atractive şi portabile.
Pagina 9 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
I.3.4. URL-uri
Piesa care leagă între ele serverele Web, browserele Web şi paginile Web este URL-
ul.
Fiecare pagină din World Wide Web are o adresă care este introdusă în browser
pentru a-i indica acestuia să încarce pagina respectivă.
Aceste adrese se numesc Uniform Resource Locators (URLs) şi sunt constituite din
şase părţi, astfel:
Protocol – protocolul care va fi folosit pentru a obţine obiectul. De obicei acesta este
http pentru obiecte din World Wide Web. Dacă protocolul este specificat, atunci acesta
trebuie urmat de semnele ://.
Host – serverul Web de la care vor fi obţinute obiectele. Acesta poate fi specificat ca
un nume DNS sau ca o adresă IP.
Port – portul calculatorului gazdă pe care rulează serverul Web. Dacă este omis,
atunci se foloseşte portul implicit, iar dacă este specificat, numărul portului trebuie precedat
de semnul :.
Path – calea către fişierul care se doreşte a fi primit sau scriptul care trebuie executat.
File – numele fişierului cerut.
Query String – parametrii opţionali pentru script. Dacă este specificat, atunci trebuie
precedat de semnul ?.
Pagina 10 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Paginile dinamice conţin foarte puţin text. În schimb extrag informaţiile necesare din
alte aplicaţii. Paginile dinamice pot comunica cu bazele de date, foi de calcul tabelar, sisteme
de gestiune a bazelor de date client-server şi multe alte aplicaţii.
Crearea paginilor Web dinamice permite crearea de aplicaţii puternice, care pot
include caracteristici precum următoarele:
interogarea aplicaţiilor de baze de date existente pentru obţinerea datelor
crearea de interogări dinamice care facilitează obţinerea în mod flexibil a datelor
execuţia procedurilor stocate
execuţia codului condiţional on-the-fly pentru a personaliza răspunsurile în funcţie de
situaţiile specifice
sporirea capabilităţilor formularelor HTML standard prin folosirea unor funcţii de
validare
popularea în mod dinamic a elementelor din formulare
personalizarea modului de afişare a informaţiilor legate de dată, timp şi monedă
folosind funcţii de formatare
uşurarea creării aplicaţiilor de introducere a datelor prin wizards
generarea automată de email
site-uri comerciale şi coşuri electronice de cumpărături
şi multe altele
Browserele Web trimit cereri către serverele Web, iar acestea le îndeplinesc – trimit
înapoi informaţiite cerute către browser. Aceste informaţii sunt de obicei fişiere HTML, ca şi
alte tipuri de fişiere.
Şi cam atât este ceea ce fac serverele Web. Ele sunt de fapt aplicaţii destul de simple –
stau şi aşteaptă cererile pe care le îndeplinesc de îndată ce le primesc. Serverele Web nu
permit interacţiunea cu bazele de date, nu permit personalizarea paginilor Web, nu permit
procesarea rezultatelor trimiterii unui formular de către utilizator.
Un Web application Server este un software care extinde serverul Web, permiţânduţi
acestuia să facă lucrurile pe care nu le poate face singur.
Pagina 11 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Pagina 12 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
PHP, acronim care provine din "PHP: Hypertext Preprocessor", este un limbaj de
scripting utilizat pe scară largă, realizat şi distribuit în sistem Open Source, care este special
realizat pentru a dezvolta aplicaţii web, prin integrarea codului PHP în documente HTML.
Sintaxa sa provine din C, Java şi Perl şi este uşor de învăţat. Scopul principal al limbajului
este acela de a scrie rapid pagini web dinamice, dar cu PHP se pot realiza mult mai multe.
PHP este una dintre cele mai interesante tehnologii existente în prezent. Deoarece
îmbină caracteristici dintre cele mai complexe cu simplitatea în utilizare, PHP a devenit rapid
un instrument de frunte pentru dezvoltarea aplicaţiilor în Web. Totuşi, spre deosebire de alte
instrumente populare pentru dezvoltarea aplicaţiilor Web, cum este Perl, PHP este un limbaj
de programare comod pentru începători, chiar şi pentru cei care nu au mai desfăşurat
activităţi de programare în trecut.
Ca şi alte limbaje de scripting pentru Web, PHP vă permite să furnizaţi un conţinut
Web dinamic, adică un conţinut Web care se modifică automat de la o zi la alta sau chiar de
la un minut la altul. Conţinutul Web este un element important în susţinerea traficului unui sit
Web; de regulă, vizitatorii nu vor mai reveni la o pagină Web care conţine aceleaşi informaţii
ca şi cele prezentate la ultima vizită. Pe de altă parte, siturile Web frecvent actualizate pot
atrage cantităţi enorme de trafic.
Mai mult, spre deosebire de limbajele de scripting, precum JavaScript, PHP rulează
pe serverul Web, nu în browserul Web. În consecinţă, PHP poate obţine accesul la fişiere,
baze de date şi alte resurse inaccesibile programului JavaScript. Acestea constituie bogate
surse de conţinut dinamic, care atrag vizitatorii.
Spre deosebire de un script scris în alte limbaje cum ar fi Perl sau C – în loc de a scrie
un program cu o mulţime de comenzi pentru a produce un HTML, folosind PHP se poate
Pagina 13 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
scrie un script HTML, ca cel de mai jos, ce include cod pentru a realiza ceva. Codul PHP este
delimitat de coduri de start şi de sfârşit ce permit intrarea şi ieşirea din "modul PHP".
<html>
<head>
<title>Exemplu</title>
</head>
<body>
<?php
echo "Salut, sunt un script PHP!";
?>
</body>
</html>
Diferenţa dintre PHP şi altceva cum ar fi JavaScript este acela că PHP este executat
pe server pe când JavaScript este executat pe calculatorului clientului (de browserul Web).
Pentru un script similar celui de mai jos sus pe un server, clientul ar primi doar rezultatele
scriptului ce este rulat, fără a vedea în nici un fel codul din spatele acestuia. Se poate chiar
configura serverul de web ca acesta să proceseze toate fisierele HTML cu PHP şi astfel nu
exită nici o metodă ca un utilizator să stie defapt ce există în fişiere.
Cu PHP se poate face orice. PHP este în principal axat pe partea de scripting ce
rulează pe server, deci poate face orice face şi un program CGI, cum ar fi colectarea de date
de la formulare, generarea de conţinut dinamic sau trimitere şi primire de cookie-uri. Dar
PHP poate face mult mai multe.
Există trei domenii principale unde sunt folosite scripturile PHP.
Scripturi ce ruleaza pe server. Acesta este cel mai tradiţional şi cel mai important
pentru PHP. Este nevoie de trei lucrui pentru a face să meargă: interpretorul PHP (CGI sau
modul de server), un server web şi un browser web. E nevoie ca serverul de web să fie pornit,
Pagina 14 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
cu o conexiune PHP instalată. Se poate accesa rezultatul programelor PHP cu un browser prin
intermediul serverului de web.
Scripting in linie de comandă. Se poate face ca PHP să ruleze fără a fi nevoie de
server şi de browser, ci doar de interpretorul PHP. Această metodă este ideală pentru script-
urile ce se vor a fi executate de regulă folosind cron (task scheduler în Windows), sau sarcini
simple de procesare a textelor.
Scrierea de aplicaţii ce rulează de partea clientului în mod grafic (GUI). Probabil că
PHP nu este limbajul cel mai bun de a scrie aplicaţii cu ferestre pentru Windows sau alte
sisteme de operare, dar dacă este bine cunocut şi se doreşte folosirea unor facilităţi avansate
ale PHP-ului în aplicaţiile ce rulează de partea clientului, se poate totuşi folosi PHP-GTK
pentru a scrie astfel de programe. De asemenea, există posibilitatea de a scrie aplicaţii ce
rulează pe platforme diferite folosind această metodă. PHP-GTK este o extensie a PHP-ului,
nedisponibila în distribuţia principală de PHP.
PHP poate fi folosit pe aproape toate marile sisteme de operare, incluzând Linux,
multe variante de Unix (incluzând HP-UX, Solaris şi OpenBSD), Microsoft Windows, Mac
OS X, RISC OS, probabil şi altele. PHP are de asemenea suport pentru majoritatea serverelor
de web din prezent. Acestea includ serverele Apache, Microsoft Internet Information Server,
Personal Web Server, Netscape şi iPlanet, serverul Oreillz Website Pro, Caudium, Xitami,
OmniHTTPd, şi multe atele. Pentru majoritatea serverelor PHP are un modul, iar pentru
celelalte suportă standardul CGI, PHP putând să lucreze ca un procesor CGI.
Deci, cu PHP, există libertatea de a alege un sistem de operare şi un server de web.
Chiar mai mult, există posibilitatea de a alege programarea procedurală sau programarea
orientată obiect, sau chiar sa se combine acestea. Cu toate acestea, nu orice facilitate a
standardului POO este prezentă în versiunea curentă a PHP-ului, multe librării de cod şi
aplicaţii mari (incluzând şi librăria PEAR) sunt scrise folosind doar cod POO.
Cu PHP programatorul nu este limitat să scoată rezultat HTML. Posibilităţile PHP-
ului includ afişarea de imagine, fişiere PDF şi chiar filmuleţe Flash (folosind librăriile libswf
şi Ming) toate generate instant. Se poate de asemeanea ca rezultatul să fie orice fişier text,
cum ar fi XHTML sau orice alte fişiere XML. PHP poate genera autmoat aceste fişiere şi să
le salveze în sistemul de fişiere în loc să le afişeze, formând un cache de partea serverului
pentru conţinutul dinamic.
Una dintre cele mai puternice şi importante facilităţi în PHP este suportul său pentru o
gamă larga de baze de date. Scrierea une pagini de web ce interacţioneaza cu o bază de date
Pagina 15 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
este incredibil de simplă. PHP suportă şi ODBC, standardul Open Database Connection, deci
se poate conecta la orice altă bază de date ce suporta acest standard mondial.
PHP are deasemeanea suport pentru a conversa cu alte servicii folosind protocoale
cum ar fi LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (pe Windows) şi multe altele.
Se pot, de asemenea, deschide socket-uri de reţea şi se poate interacţiona între aproape toate
limbajele de programare Web. PHP are suport pentru instanţierea obiectelor Java şi utilizarea
lor într-un mod transparent ca obiecte PHP. Se pot de asemenea folosi extensii CORBA
pentru a accesa obiecte aflate la distanţă.
PHP are capabilităţi extrem de folositoare pentru procesarea textului, de la POSIX
Extins sau expresii regulare Perl, până la parsarea documentelor XML. Pentru parsarea şi
accesarea documentelor XML, suportă standardele SAX şi DOM.
Folosind PHP în domeniul comerţului electronic, sunt foarte folositoare pentru
programul tău de plaţi online funcţii de plată Cybercash, CyberMUT, VeriSign Payflow Pro
şi CCVS.
În cele din urmă, dar nu ultimul rând, PHP are şi alte extensii interesante, cum ar fi
funcţii ale motorului de căutare mnoGoSearch, funcţii pentru accesarea IRC-ului, multe
utilitare de compresie (gzip, bz2), conversie de calendar, traducere...
Când PHP interpretează un fişier trece prin textul acestuia până când întâlneşte unul
din tag-urile speciale care îi spun să pornească interpretarea textului ca fiind cod PHP. Mai
departe, parser-ul execută tot codul întâlnit, până la întâlnirea unui tag PHP de închidere, care
anunţă trecerea normală prin text, din nou. Acest mecanism permite înglobarea codului PHP
în interiorul codului HTML: tot ceea ce este în afara tag-urilor PHP este lăsat nemodificat, în
timp ce tot ceea ce este în interior este interpretat ca fiind cod.
Există patru categorii de tag-uri care pot fi folosite pentru a marca bolcurile de cod
PHP. Dintre acestea, doar două (<?php. . .?> şi <script language="php">. . .</script>) sunt
întotdeauna disponibile. Cu toate ca tag-urile în format scurt şi cele de tip ASP par a fi
Pagina 16 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
convenabile, ele nu sunt la fel de portabile ca cele în format lung. De asemenea, dacă se
doreşte includerea codului PHP în XML sau XHTML, este necesar să se folosească tag-urile
în forma <?php. . .?> pentru a corespunde standardului XML
Cele patru tipuri de tag-uri sunt:
<?php echo("if you want to serve XHTML or XML documents, do like this\n"); ?>
2. <? echo ("this is the simplest, an SGML processing instruction\n"); ?>
<?= expression ?> This is a shortcut for "<? echo expression ?>"
3. <script language="php">
echo ("some editors (like FrontPage) don't
like processing instructions");
</script>
4. <% echo ("You may optionally use ASP-style tags"); %>
<%= $variable; # This is a shortcut for "<% echo . . ." %>
Prima variantă, <?php. . .?>, este metoda preferată deoarece permite folosirea PHP-
ului în cod corform standardului XML, cum ar fi XHTML.
Cea de-a doua variantă nu este întotdeauna posibilă. Tag-urile prescurtate pot fi
folosite doar dacă au fost activate. Acest lucru poate fi făcut prin intermediul funcţiei
short_tags() (numai în PHP3), prin activarea opţiunii short_open_tag în fişierul de
configurare, sau prin compilarea scripturilor folosind opţiunea enable-short-tags. Chiar dacă
este implicit activată în fişierul php.ini, folosirea tag-urilor prescurtate nu este recomandată.
Cea de-a patra variantă poate fi folosită numai dacă tag-urile de tip ASP au fost
activate folosind setarea asp_tags din fişierul de configurare.
<?php
if ($expression) {
?>
<strong>This is true.</strong>
<?php
} else {
?>
<strong>This is false.</strong>
Pagina 17 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
<?php
}
?>
Aceasta funcţionează exact cum este de aşteptat, deoarece când PHP întâlneşte tag-ul
de închidere ?> începe afişarea a ceea ce întâlneşte până la apariţia unui alt tag de start. În
cazul blocurilor mari de text, ieşirea din modul PHP este în general mai eficientă decât
trimiterea textului folosind echo() sau print().
Instrucţiunile sunt separate la fel ca în C sau Perl – fiecare instrucţiune este terminată
cu un semn punct şi virgulă.
Tag-ul de închidere implică şi sfârşitul instrucţiunii, deci următoarele două exemple
sunt echivalente:
<?php
echo "This is a test";
?>
<?php echo "This is a test" ?>
II.2.3. Comentariile
<?php
echo "This is a test"; // This is a one-line c++ style comment
/* This is a multi line comment
yet another line of comment */
echo "This is yet another test";
Pagina 18 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Tipul unei variabile, de obicei nu este stabilit de programator, ci este decis la rulare de
PHP, în funcţie de contextul în care acea variabilă este folosită.
II.4 Variabile
Pagina 19 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
<?php
$foo = 'Bob'; // Assign the value 'Bob' to $foo
$bar = &$foo; // Reference $foo via $bar.
$bar = "My name is $bar"; // Alter $bar...
echo $bar;
echo $foo; // $foo is altered too.
?>
PHP furnizează un număr larg de variabile predefinite. Multe din aceste variabile, nu
pot fi documetate complet deoarece sunt dependente de serverul pe care rulează, de versiunea
şi setarea acestuia precum şi de alţi factori.
Unele din aceste variabile nu vor fi folosite când PHP rulează în linie de comandă.
Pagina 20 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
$GLOBALS
Conţine o referinţă la fiecare variabilă care este în mod curent valabilă în scopul
global al script-ului. Cheile acestui şir sunt numele variabilelor globale.
$_SERVER
Reprezintă variabilele setate de serverul de web sau legate direct de mediul de
execuţie al scriptului curent.
$_GET
Reprezintă variabilele oferite scritpt-ului direct prin HTTP GET. Analog vechiului şir
$HTTP_GET_VARS (care încă este valabil, dar depreciat).
$_POST
Reprezintă variabilele oferite scritpului direct prin HTTP POST. Analog vechiului şir
$HTTP_POST_VARS (care încă este valabil, dar depreciat).
$_COOKIE
Reprezintă variabilele oferite scritpului direct prin HTTP. Analog vechiului şir
$HTTP_COOKIE_VARS (care încă este valabil, dar depreciat).
$_FILES
Reprezintă variabilele oferite scritpului prin upload-ul de fişiere folosind modul POST
din HTTP. Analog vechiului şir $HTTP_POST_FILES (care încă este valabil, dar depreciat).
$_ENV
Reprezintă variabilele oferite scritpt-ului prin mediu. Analog vechiului şir
$HTTP_ENV_VARS (care încă este valabil, dar depreciat).
$_REQUEST
Reprezintă variabilele oferite scritpt-ului prin mecanismele de input GET, POST, şi
COOKIE, deci care nu pot fi de încredere.
$_SESSION
Pagina 21 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
<?php
function Test () {
$a = 0;
echo $a;
$a++;
} ?>
Această funcţie este destul de nefolositoare deoarece de fiecare dată este apelată să
seteze valorea 0 variabilelei $a şi să printeze "0".
Instrucţiunea $a++ care incrementează variabila nu serveşte nici unui scop deoarce,
de îndată ce funcţia iese, variabila dispare. Pentru folosirea unei funcţii de numărare care nu
va mai pierde număratoarea curentă, variabiala $a este declarată statică.
<?php
function Test()
{
static $a = 0;
echo $a;
$a++;
}
?>
Astfel, de fiecare dată când funcţia Test() este apelată, aceasta va afişa valoarea
variabilei $a şi o va incrementa.
Pagina 22 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
<?php
function Test()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test ();
}
$count--;
}
?>
Când un formular este trimis unui scrip PHP, informaţiile din acel formular sunt
automat transmise scriptului PHP. Sunt mai multe modalităţi de a accesa informaţia, de
exemplu:
<form action="foo.php" method="POST">
Name: <input type="text" name="username"><br>
Email: <input type="text" name="email"><br>
<input type="submit" name="submit" value="Submit me!">
</form>
Pagina 23 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
<?php
// Available since PHP 4.1.0
print $_POST['username'];
print $_REQUEST['username'];
import_request_variables('p', 'p_');
print $p_username;
print $HTTP_POST_VARS['username'];
print $username;
?>
Pagina 24 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
<?php
setcookie("MyCookie[foo]", "Testing 1", time()+3600);
setcookie("MyCookie[bar]", "Testing 2", time()+3600);
?>
Pagina 25 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
O bază de date este o colecţie de date organizată astfel încât acestea să poată fi uşor
găsite şi actualizate. O bază de date conţine toate informaţiile necesare despre obiectele ce
intervin într-o mulţime de aplicaţii, relaţiile logice între aceste informaţii şi tehnicile de
prelucrare corespunzătoare. În bazele de date are loc o integrare a datelor, în sensul că mai
multe fişiere sunt privite în ansamblu, eliminându-se pe cât posibil informaţiile redundante.
De asemenea, se permite accesul simultan la aceleaşi date, situate în acelaşi loc, sau
distribuite spaţial, a mai multor persoane de pregătiri diferite, fiecare cu stilul personal de
lucru.
Sistemul de programe care permite construirea unei baze de date, introducerea
informaţiilor în bazele de date şi dezvoltarea de aplicaţii privind bazele de date se numeşte
Sistem de Gestiune a Bazelor de Date (SGBD). Un SGBD dă posibilitatea utilizatorului să
aibă acces la date folosind un limbaj de nivel înalt, apropiat de modul obişnuit de exprimare,
pentru a obţine informaţii, utilizatorul făcând abstracţtie de algoritmii aplicaţi pentru
selecţionarea datelor implicate şi a modului de memorare a lor. SGBD-ul este o interfaţă între
utilizatori şi sistemul de operare.
Sistemele de baze de date au în vedere mai multe tipuri de structuri de reprezentare a
informaţiilor la nivel logic şi de operare cu ele dintre acestea, modelul relaţional fiind cel mai
folosit.
Acest model a fost dezvoltat de un matematician de la IBM, E.F. Codd, prin anii
1960, iar bazele de date organizate be baza acestui model se numesc baze de date relaţionale.
Un model relaţional de baze de date cuprinde trei componente principale:
- Structura datelor - prin definirea unor domenii şi a relaţiilor n-are.
- Integritatea datelor - prin impunerea unor restricţii.
- Prelucrarea datelor - prin operaţii din algebra relaţională sau calculul relaţional.
Pagina 26 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Modelul relaţional se bazează pe noţiunea matematică de relaţie, aşa cum este definită
în teoria mulţimilor, şi anume ca o submulţime a produsului cartezian a unei liste finite de
mulţimi numite domenii. Elementele unei relaţii se numesc tupluri, iar numărul de domenii
din produsul cartezian se numeşte aritatea relaţiei.
De obicei relaţiile sunt reprezentate sub forma unor tabele în care fiecare rând
reprezintă un tuplu şi fiecare coloană reprezintă valorile tuplurilor dintr-un domeniu dat al
produsului cartezian. Coloanelor şi, respectiv, domeniilor corespunzătoare lor li se asociază
nume intitulate atribute.
Accesul la informaţii se face pe baza cheilor. O cheie este o coloană (sau un grup de
coloane) care identifică în mod unic un rând dintr-un tabel.
Pentru a deosebi anumite calităţi specifice ale unor relaţii, s-au făcut mai multe
clasificări, dintre acestea, cea mai frecvent utilizată fiind clasificarea în forme normale. Se
spune că o relaţie (un tabel) este într-o formă normală particulară dacă satisface o mulţime
dată de constrângeri. Transformarea unei relaţii într-o mulţime de relaţii de un anumit tip se
numeşte normalizare. Există cinci forme normale, primele trei au fost definite de Codd, iar a
patra şi a cincea au fost definite de Fagin.
Principalele scopuri urmărite în procesul de normalizare sunt: eliminarea unor
redundanţe, evitarea unor anomalii de reactualizare, realizarea unui proiect care să reprezinte
cât mai fidel modelul real (uşor de înţeles şi eventual de modificat), stabilirea unor
constrângeri de integritate simple şi altele.
SQL (Structured Query Language) este un limbaj relaţional de cereri care formează
nucleul multor sisteme de gestiune a bezelor de date. SQL a fost dezvoltat de IBM în anii '70
- '80 şi standardizat la sfârşitul anilor '80.
Pagina 27 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
În ciuda simplităţii sale, SQL este un limbaj foarte puternic, care poate obţine accesul
la date stocate în mai multe tabele, poate filtra datele dorite şi poate sorta, rezuma şi afişa
rezultatele.
În general, nu se pot anticipa toate modalităţile în care utilizatorii pot dori să obţină
acces la date şi să le vizualizeze. Ca atare, nu se pot scrie programe de aplicaţie care să
satisfacă fiecare potenţială necesitate de informaţii. Este aproape sigur că vor apărea unele
cereri de date neprevăzute (sau ad-hoc).
Utilizând SQL, este posibil accesul la datele stocate într-o bază de date relaţională
fără a scrie un program de aplicaţie, permiţând frecvent evitarea întârzierilor şi a costurilor
implicate de programarea personalizată. Astfel, bazele de date relaţionale permit satisfacerea
tuturor cererilor ad-hoc de informaţii, care ar rămâne fără răspuns în alte situaţii.
În funcţie de întrebuinţarea sa, SQL poate fi împărţit în trei componente:
- DDL - Data Definition Language – folosit pentru a crea bazele de date.
- DML - Data Manipulation Language - folosit la actualizarea datelor.
- DQL - Data Query Language - folosit pentru extragerea informaţiilor din baze de
date.
Pagina 28 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Prima operaţie din cadrul procesului de modelare E-R este identificarea coloanelor.
Coloanele înregistrează o singură caracteristică a unei entităţi. În încercarea de identificare a
coloanelor în general este util să se răspundă la unele întrebări conexe, cum sunt următoarele:
Care sunt deciziile pe care sistemul trebuie să le ia sau să le susţină?
Care sunt operaţiile pe care sistemul trebuie să le execute sau să le susţină?
Care sunt datele necesare pentru a lua aceste decizii şi pentru a efectua aceste
operaţii?
De obicei este evident că unele coloane sunt corelate, în sensul că fac referire la un
anumit set de individualităţi corelate. Ca atare, aceste coloane pot fi grupate pentru a forma o
entitate. Uneori o coloană dată este corelată cu mai multe entităţi; în acest caz, coloana poate
apărea de mai multe ori pe listă.
Pagina 29 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
asociate are o valoare unică pentru fiecare din apariţiile entităţii. Dacă o asemenea coloană
există, aceasta va fi identificată drept cheie primară a entităţii.
Se pot gaăsi unele entitaţi care nu conţin nici o coloană adecvată pentru rolul de cheie
primară. Într-o asemenea situaţie se poate căuta o serie de coloane care au o valoare
combinată unică. Dacă se descoperă o asemenea serie, se poate identifica drept cheie primară
compusă a entitaţii.
S-ar putea să nu se descopere nici o coloană sau serie de coloane care să identifice în
mod unic fiecare apariţie a unei entitaăţi. În acest caz, se creează o coloană nouă, care va
conţine o identificare artificială unică, şi se identifică noua coloană ca fiind cheia primară a
entitaţii.
Se poate folosi o identificare artificială unică chiar şi atunci când una sau mai multe
coloane pot servi drept cheie primară. Astfel, se evită problemele care apar când identificatori
presupuşi unici se dovedesc a nu fi unici.
Operaţia finală şi cea mai dificilă din cadrul activitaţii de modelare E-R o constituie
identificarea cheilor externe. Acestea sunt pur şi simplu coloane ale caror valori sunt corelate
cu acelea ale valorilor cheilor primare ale unei entităţi oarecare. Procesul de identificare a
cheilor externe constă în compararea coloanelor cu cheile primare şi, pentru fiecare
combinaţie posibilă, în raspunsul la întrebarea: “Există o relaţie între valoarea acestei coloane
şi valoarea acestei chei primare?”.
Ultima operţie de fineţe aplicată unui model E-R, după normalizarea bazei de date,
constă în specificarea unui tip de date pentru fiecare coloană.
Majoritatea bazelor de date relaţionale acceptă urmatoarele tipuri de date generale:
caracter
întreg
Pagina 30 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
zecimal
dată şi oră
binar
Pagina 31 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
IV. MySQL
MySQL este un sistem de getiune a bazelor de date. Mai mult chiar, MySQL este un
sistem de gestiune a bezelor de date relaţionale şi este distribuit în regim Open Source.
MySQL software is Open Source. Aceasta înseamnă că MySQL poate fi descărcat de
pe Internet, poate fi folosit fără a plăti ceva şi, dacă se doreşte, codul sursă poate fi studiat şi I
se pot aduce modificări necesare.
Serverul de baze de date MySQL este foarte rapid, fiabil şi uşor de utilizat. Iniţial a
fost dezvoltat pentru a manipula baze de date de dimensiuni mari mult mai rapid decât
soluţiile existente. Conectivitatea sa, viteza şi securitatea fac ca Serverul MySQL să fie
potrivit pentru accesarea bazelor de date prin Internet.
Why use the MySQL Database Server?
MySQL Database Software este un sistem client/server ce constă într-un server
MySQL multithreaded care suportă diferite programe client şi biblioteci, unelte
administrative şi o gamă largă de interfeţe pentru programarea aplicaţiilor (Application
Programming Interfaces – APIs)
Pagina 32 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
MySQL dispune de multe tipuri de date pentru coloane: numere întregi de 1,2,3,4 şi 8
bytes lungime cu/fără semn, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE,
TIME, DATETIME, TIMESTAMP, YEAR, SET, ENUM, şi tipuri geometrice OpenGIS
Înregistrări cu lungime fixă şi cu lungime variabilă
Pagina 33 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Comanda SHOW specifică pentru MzSQL poate fi folosită pentru a obţine informaţii
despre bazele de date, tabele şi indecşi.
Numele funcţiilor nu intră în conflict cu numele tabelelor sau ale coloanelor.
Într-o acceaşi interogare se pot folosi tabele din baze de date diferite
IV.2.4. Securitate
Manipulează baze de date de dimensiuni mari. MzSQL este folosit cu baze de date
care conţin 50 de milioane de înregistrări.
Sunt permişi până la 32 de indecşi pentru un tabel. Fiecare index poate consta din una
până la 16 coloane sau părţi de coloane.
IV.2.6. Conectivitate
Pagina 34 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
IV.2.7. Localizare
Serverul MySQL are suport inclus pentru instrucţiuni SQL care verifică, optimizează
şi repară tabelele. Aceste instrucţiuni sunt disponibile în linia de comandă prin intermediul
clientului mysqlcheck.
Toate programele MySQL pot fi invocate cu opţiunea –help sau -? Pentru a obţine
suport online.
Pentru a realiza conectarea la server trebuie specificat un nume de utilizator şi, de cele
mai multe ori, o parolă. Dacă serverul rulează pe un alt calculator trebuie specificat şi un
hostname. Conectarea se realizează astfel:
Pagina 35 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
unde host şi user reprezintă hostname-ul unde rulează serverul MySQL şi respectiv
numele unui cont MySQL, iar ******** reprezintă parola care trebuie introdusă.
Dacă conectarea se realizează cu succes în continuare sunt afişate informaţii
introductive, urmate de prompt-ul mysql>
mysql> QUIT
bye
Următoarea comandă este o interogare simplă care cere serverului informaţii precum
versiunea curentă şi data curentă:
Pagina 36 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Pe o singură linie pot fi introduse mai mule comenzi, separate cu câte un semn punct
şi virgulă, de exemplu:
+---------------------+
| NOW() |
+---------------------+
| 1999-03-19 00:15:33 |
+---------------------+
Pagina 37 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
-> CURRENT_DATE;
+--------------------+--------------+
| USER() | CURRENT_DATE |
+--------------------+--------------+
| joesmith@localhost | 1999-03-18 |
+--------------------+--------------+
Prompt-ul se schimbă din mysql> în -> după introducerea primei linii a unei
interogări pe mai multe linii. Aceasta indică faptul că respectiva interogare este incompletă şi
mysql aşteaptă introducerea restului interogării.
Se poate întrerupe introducerea unei interogări pe linii multiple folosind simbolurile \c
mysql> SELECT
-> USER()
-> \c
mysql>
Baza de date mysql este necesaă deoarece descrise privilegiile de acces ale
utilizatorilor, iar baza de date test este oferită, de obicei, ca mediu de test pentru utilizatori.
Pagina 38 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Comanda pentru a crea o nouă bază de date este CREATE DATABASE, de exemplu:
După ce a fost creată, o bază de date nu conţine nici un table, după cum se poate
observa introducând comanda SHOW TABLES:
Pagina 39 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Pagina 40 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
V. APLICAŢIE
În cadrul acestei aplicaţii prin combinarea a PHP MySQL s-a dorit realizarea unui site
dinamic care dă posibilitatea vizitatorilor săi să-şi găseacă perechea potrivită. Site-ul
reprezintă implementarea Web a unei agenţii matrimoniale. Utilizatorii se pot înregistra,
pentru a-şi introduce mai multe date personale. Pot vizualiza informaţiile celorlaţi membrii şi
căuta anumite persoane în funcţie de ccriteriil selectate.
Aplicaţia implementează şi unele funcţionalităţi avansate, cum ar fi trimiterea
automată de e-mail către adresele specificate de utilizatori şi încarcarea de fişiere pe server.
Pentru o mai bună organizare a aplicaţiei fişierele au fost incluse, pe cât posibil, în
directoare cu denumiri semnificative. Astfel, directorul images conţine toate imaginile incluse
în paginile site-ului, în directorul photos sunt stocate fotografiile membrilor înregistraţi.
Directorul templates conţine fişierele .php folosite ca template pentru toate paginile din site,
iar directorul styles conţine fişierele .css (Cascading Style Sheet) folosite pentru realizarea
layout-ului site-ului. În directorul functions sunt conţinute fişiere .php care vor fi incluse în
alte fişiere şi în ele sunt definite mai multe funcţii utile.
Paginile principale ale aplicaţiei sunt următoarele: index.php, members.php,
register.php, search.php, contact.php şi about.php. Astfel, index.php reprezintă pagina home a
site-ului, paginile contact.php şi about.php conţin informaţii despre autorul aplicaţiei şi,
respectiv, modul de contactare a acestuia. Pagina register.php conţine un formular html pe
care utilizatorii trebuie să-l completeze pentru a se putea înregistra ca membrii ai site-ului.
Dacă formularul este completat corect şi înregistrarea este realizată cu succes iar
utilizatorului îi este prezentat un mesaj sugestiv şi este trimis un e-mail către adresa
specificată de acesta, respectiv, dacă înregistrarea eşuează, este afişat un mesaj de eroare
corespunzător. Pagina members.php conţine lista tuturor membrilor înregistraţi, cu câteva
Pagina 41 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
informaţii reprezentative pentru fiecare şi cu legături către paginile personale care conţin
informaţii detaliate ale acestora. Pagina search.php cuprinde un formular html care permite
căutarea în baza de date folosind mai multe criterii. Rezultatele căutării sunt afişate în pagina
search_results.php, având acelaşi layout ca şi pagina member_details.php, pagina cu
informaţii detaliate despre fiecare membru.
Pentru păstrarea aceluiaşi layout pentru toate paginile, ca şi pentru a-l putea modifica
sau înlocui cu uşurinţă, paginile au fost implementate pe baza unui fişier folosit ca template,
căruia i-a fost ataşat un fişier .css.
Fişierul template folosit pe care este structurat site-ul conţine un tabel format din trei
rânduri ce îndeplinesc rolurile de header, content şi footer. Partea de header constă într-un
nou tabel, care la rândul său conţine trei rânduri, folosite pentru titlu, bară de meniu şi bara de
stare. Titlul va fi setat pentru fiecare pagină care implementează acest template. Bara de
meniuri este realizată prin includerea fişierului menubar.php, iar bara de stare este
implementată în fişierul statusbar.php. Partea de content va fi, de asemenea, setată separat
pentru fiecare fişier al site-ului. Partea de footer implementată în fişierul footer.php conţine
informaţii de tip Copyright.
Codul complet al fişierului template.php este prezentat în continuare:
<body>
<table width="800" align="center">
Pagina 42 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
<tr>
<td>
<table width="100%" align="center">
<tr>
<td align="center">title</td>
</tr>
<tr>
<td><?php include "menubar.php"; ?></td>
</tr>
<tr>
<td><?php include "statusbar.php"; ?></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">content</td>
</tr>
<tr>
<td>
<?php
include "footer.php";
?>
</td>
</tr>
</table>
</body>
</html>
Fişierul .css conţine declaraţiile de stil pentru elementele HTML folosite în cadrul
paginilor. Acestea pot fi cu uşurinţă modificate şi, datorită faptului că acest Style Sheet este
aplicat tuturor paginilor, întregul layout al site-ului este modificat automat.
Pagina 43 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Pentru stocarea informaţiilor despre membrii aplicaţiei s-a folosit o bază de date
MySQL. Aceasta este formată din patru tabele, şi anume members, care conţine informaţiile
despre membrii, languages, care conţine o listă a limbilor pe care utilizatorii le pot selecta,
spokenlanguages, care reprezintă legăturile dintre fiecare membru şi limbile cunoscute de
acesta şi photos, care conţine informaţiile despre fotografiile mebrilor, maximum cinci
fotografii pentru fiecare membru.
Structura tabelului members, cel mai complex dintre tabele bazei de date folosite, este
descrisă în figura următoare, precum şi tabelele languages, spokenlanguages şi photos:
Pagina 44 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Pagina 45 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
iar în caz contrar returnează o valoare, denumită identificator de legătură, care serveşte ca
instrument de manipulare pentru accesul la serverul MySQL.
Se poate omite numele gazdei, identificatorul de utilizator şi parola, sau toate cele trei
argumente. Dacă se procedează astfel, vor fi luate în considerare, în mod prestabilit,
următoarele valori:
-numele gazdei: localhost
-identificatorul de utilizator: identificatorul de utilizator al procesului server MySQL
-parolă: o parola vidă
<?php
function connectdb(){
$server=mysql_connect("localhost","root","");
//…..
}
?>
Selectarea bazei de date a fost implementată tot în funcţia connectdb() prezentată mai
sus, astfel:
Pagina 46 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
$db=mysql_select_db("adylic");
Biblioteca MySQL din PHP furnizează două funcţii de verificare a erorilor, şi anume
mysql_errno() şi mysql_error(). Fiecare funcţie returnează un rezultat care reflectă eroarea,
dacă există, asociată celei mai recente operaţii cu MySQL. Dacă programul execută o
secvenţă de operaţii MySQL, iar prima operaţie generează o eroare, informaţiile despre
erorile respective sunt pierdute în momentul iniţierii celei de a doua operaţii.
Nici una din cele două funcţii nu necesită argumente. Functia mysql_errno()
returnează un cod numeric de eroare, în timp ce funcţia mysql_error() returnează o descriere
textuală a erorii. Dacă nu s-a produs nici o eroare, codul numeric al erorii este zero şi
descrierea are ca valoare un şir vid.
Informaţiile de eroare sunt disponibile numai dacă este activă o conexiune cu serverul
MySQL, deci nu se poate folosi nici una dintre aceste funcţii pentru a raporta erorile asociate
funcţiei mysql_connect().
Incluzând şi mecanismul de detectare a erorilor, funcţia connectdb() arată astfel :
<?php
function connectdb(){
$server=mysql_connect("localhost","root","");
$db=mysql_select_db("adylic");
if(mysql_errno())
die("nu s a conectat");
}
?>
Pagina 47 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Numeroase funcţii PHP pot produce erori sau mesaje de avertizare, dar PHP
furnizează funcţia error_reporting(), care permite eliminarea mesajelor nedorite. Funcţia are
următoarea formă:
error_reporting (masca)
unde masca specifică tipul mesajelor care vor fi raportate. Dacă se specifica zero ca
valoare a atributului masca, nu va fi raportat nici un mesaj. Dacă se specifica E_ALL ca
valoare a atributului masca, vor fi raportate toate mesajele.
Din punctul de vedere al limbajului PHP, există două categorii de interogări SQL:
Interogările SELECT, care returnează rânduri ale unui tabel.
Interogările UPDATE, INSERT şi DELETE, care nu returnează rânduri ale unui
tabel.
Pagina 48 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Pentru a verifica dacă o interogare UPDATE, INSERT sau DELETE a avut efectul
dorit, se poate folosi funcţia mysql_affected_rows(), care returnează numărul rândurilor
afectate de interogarea cea mai recentă. Funcţtia are următoarea formă:
mysql_affected_rows()
În cazul în care cea mai recentă interogare UPDATE, INSERT sau DELETE a eşuat,
funcţia returnează valoarea -1.
Pagina 49 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Biblioteca de funcţii MySQL a limbajului PHP include un set de funcţii prin care se
pot obţine informaţii despre un set de rezultate, inclusiv:
Pagina 50 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Pagina 51 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
V.2.17. Determinarea tabelului MySQL asociat unei coloane din setul de rezultate
Pagina 52 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
coloane este 0, indexul asociat celei de a doua coloane este 1, etc. În cazul în care coloana
conţine o valoare calculată sau dacă respectiva coloană nu este asociata în alt mod cu un tabel
MySQL, funcţia returneaza un şir vid.
Pagina 53 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
obţinerea accesului la rândurile unui set de rezultate într-o manieră non-secvenţială. Funcţia
are forma :
mysql_data_seek(rezultat, numar_rind)
unde rezultat este valoarea returnată de funcţia mysql_query(), iar numar_rind este
indexul rândului la care doriţi să obtineţi accesul. Primul rând al setului de rezultate este
numerotat cu 1, al doilea cu 2 etc. Funcţia returnează true dacă execuţia reuşeşte, respectiv
false în caz contrar. O invocare ulterioară a funcţiei mysql_fetch_row() sau a funcţiei
mysql_fetch_array() va returna rândul din poziţia specificată a setului de rezultate.
Pentru înregistrarea unui nou membru în baza de date a aplicaţiei, utilizatorul trebuie
să completeze formularul din pagina register.php. Acesta sunt cuprinde toate câmpurile din
tabelul members al bazei de date, precum şi o listă cu toate înregistrările din tabelul
languages, pentru ca utilizatorul să poată selecta limbile cunoscute. Toate câmpurile sunt
obligatorii, unele au furnizate valori implicite, iar pentru cele care necesită îndeplinirea
anumitor condiţii pentru a putea fi valide a fost realizată o funcţie JavaScript. Aceasta
realizează validarea datelor introduse în formular înainte ca cererea să fie trimisă spre
procesare serverului.
Câmpurile de tip select din formular trebuie să aibă valori care sunt obţinute din
valorile posibile ale anumitor coloane de tip enum din baza de date, iar acestea sunt obţinute
prin apelarea funcţiei showenumvalues($col), definită în fişierul showenumvalues.php, inclus
în directorul functions, funcţie care este implementată astfel:
<?php
function showenumvalues($col){
$column=$col;
$query="SHOW COLUMNS FROM members LIKE '{$column}'";
$result=mysql_query($query);
Pagina 54 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
if(mysql_num_rows($result)>0){
$row=mysql_fetch_row($result);
$options=explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\\2",$row[1]));
}
foreach($options as $val){
echo '<option value="'.$val.'">'.$val.'</option>';
}
}
?>
Această funcţie este apelată în fişierul register.php pentru diferite valori ale
parametrului $col, de exemplu:
Dacă datele au fost completate corect, formularul este trimis spre procesare. De acest
lucru se ocupă fişierul register_action.php. Se încearcă inserarea elementelor din formular
folosind o interogare de tip insert şi prin apelul funcţiei mysql_query. Dacă inserarea eşuează
este afişat un mesaj de eroare şi utilizatorului îi este oferită posibilitatea de a se întoarce în
pagina cu formularul de înregistrare. Dacă înregistrarea are loc cu succes, în continuare se
introduc în tabelul languages limbile specificate de utilizator, este trimis un e-mail informativ
către adresa specificată de acesta şi i se oferă posibilitatea de a trece într-o nouă pagină în
care îşi poate upload-a până la maximum cinci fotografii personale. Tot acum este creat pe
server un director al cărui nume este format din stringul “member_” concatenat cu id-ul
noului membru introdus în baza de date, director ce va fi folosit pentru stocarea fotografiilor
membrului respectiv.
Pentru a nu permite execuţia interogărilor din pagina register_action.php în cazul în
care aceasta ar fi introdusă direct în bara de adresă a browser-ului, întreg codul este cuprins
într-o instrucţiune if în care se verifică dacă a fost apăsat butonul sumbit din formularul de
înregistrare astfel:
if(isset($_POST["submit"])){
//….
}
Pagina 55 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Pentru introducerea datelor din formular în baza de date, acestea sunt reţinute în
prealabil în variabile php corespunzătore:
$haircolor=$_POST["haircolor"];
$eyescolor=$_POST["eyescolor"];
$smoker=$_POST["smoker"];
$maritalstatus=$_POST["maritalstatus"];
$kids=$_POST["kids"];
$kidslivingwith=$_POST["kidslivingwith"];
$religion=$_POST["religion"];
$education=$_POST["education"];
$occupation=$_POST["occupation"];
$income=$_POST["income"];
$city=$_POST["city"];
$state=$_POST["state"];
$country=$_POST["country"];
$hobby=$_POST["hobby"];
$personaldescription=$_POST["personaldescription"];
$relationship=$_POST["relationship"];
$person=$_POST["person"];
apoi are loc crearea string-ului care va fi folosit în funcţia mysql_query:
Pagina 56 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
$result=mysql_query($insert);
if(mysql_affected_rows()!=1){
$message="<br><center>Registration failed</center><br>".
"<center>Click the <i>back</i> button to try again! </center>";
}
else{
$newid = mysql_insert_id();
if(isset($_POST["languages"])){
$languages=$_POST["languages"];
for($i=0;$i<count($languages);$i++){
$insert2="INSERT INTO spokenlanguages VALUES(". $newid.",".
$languages[$i].")";
$result2=mysql_query($insert2);
}
}
chdir('photos');
$dir = 'member_'.$newid;
mkdir($dir);
$message="<center>Congratulations! You have been succesfully
registered!</center><br>".
'<center>You can upload up to <b>5</b> photos <a href="upload.php?id='.
$newid.'">here</a></center><br><br>';
mailto($email,$password);
}
<?php
Pagina 57 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
function mailto($to,$pass){
$TO=$to;
$FROM = "bobeanul@yahoo.com";
$SUBJECT = "Welcome to my agency";
$HEADER = "MIME-Version: 1.0\r\n";
$HEADER = $HEADER . "Content-type: text/html; charset=iso-8859-1\r\n";
$HEADER = $HEADER . "From: " . $FROM . "\r\n";
$MESSAGE = 'Thank you for your registration at '.
'<a href="http://www.bobeanu.as.ro">my agency</a>.<br>'.
'You can login to your personal page using this e-mail address and the password you
specified:<br>'.
'Your password is: '.$pass;
mail($TO, $SUBJECT, $MESSAGE, $HEADER);
}
?>
Pentru căutarea în baza de date a fost creat pagina search.php care conţine un
formular în care utilizatorul poate specifica creiteriile de căutare. Aplicaţia permite căutarea
membrilor folosind orice combinaţie a următoarelor coloane din tabelul members: name,
gender, height, weight, haircolor, eyescolor, maritalstatus, smoker, country.
După introducerea informaţiilor dorite pentru căutare, formularul este trimis spre
procesare către pagina search_result.php. Aceasta include fişierul find.php, din directorul
functions, în care este definită funcţia find(). Aceasta primeşte ca parametrii toate variabilele
din formularul de căutare şi, ăn fucţie de valorile acestora, formează stringul care va fi folosit
ăn interogare, astfel:
<?php
function find($name, $gender, $height, $weight, $haircolor, $eyescolor,
$maritalstatus, $smoker, $country){
Pagina 58 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
if($name!="")
$query=$query." AND name LIKE '%".$name."%' ";
if($height!=0)
$query=$query." AND height=".$height;
if($weight!=0)
$query=$query." AND weight=".$weight;
if($haircolor!="")
$query=$query." AND haircolor='".$haircolor."'";
if($eyescolor!="")
$query=$query." AND eyescolor='".$eyescolor."'";
if($maritalstatus!="")
$query=$query." AND maritalstatus='". $maritalstatus."'";
if($smoker!="")
$query=$query." AND smoker='".$smoker."'";
if($country!="")
$query=$query." AND country='".$country."'";
return $query;
}
?>
În pagina search_results are loc apelul metodei find folosind datele introduse în
formular şi se execută interogarea respectivă. Rezultatele căutării sunt prezentate într-un
tabel, câte o înregistrare pe fiecare linie, cuprinzând câteva detalii pentru fiecare membru
găsit, şi cu lkegături către paginile cu detalii despre fiecare.
<?php
$findresults=find($_POST["name"], $_POST["gender"], $_POST["height"],
$_POST["weight"], $_POST["haircolor"], $_POST["eyescolor"], $_POST["maritalstatus"],
$_POST["smoker"], $_POST["country"]);
Pagina 59 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
$result=mysql_query($findresults);
echo "<table><tr><td>Name</td> <td>Gender</td> <td>Height</td>
<td>Weight</td> <td>Haircolor</td>".
"<td>Eyescolor</td> <td>Marital Status</td> <td>Smoker</td> <td>Country</td>";
while($row=mysql_fetch_array($result)){
?>
<tr>
<td><?php echo $row["name"]; ?></td>
<td><?php echo $row["gender"]; ?></td>
<td><?php echo $row["height"]; ?></td>
<td><?php echo $row["weight"]; ?></td>
<td><?php echo $row["haircolor"]; ?></td>
<td><?php echo $row["eyescolor"]; ?></td>
<td><?php echo $row["maritalstatus"]; ?></td>
<td><?php echo $row["smoker"]; ?></td>
<td><?php echo $row["country"]; ?></td>
</tr>
<?php }?>
</table>
Pentru afişarea tuturor membrilor înregistraţi în baza de date există două legături
specificate în fişierul menubar.php, respectiv pentru Men şi Women. Ambele legături indică,
însă, către aceeaşi pagină, şi anume members.php, dar care primeşte diferite valori pentru
atributul detip URL gender. Astfel, pentru Men legătura se face către pagina members.php?
gender=male, şi respectiv, pentru Women, legătura este către members.php?gender=female.
În pagina members.php, construită pe baza templeate-ului, informaţiile sunt
prezentate sub forma unui tabel care conţine pe fiecare linie câteva infoormaţii semnificative
pentru fiecare membru şi legătura către pagina detaliată a acestuia. Înainte de afişarea
informaţiilor are loc o verificare a valorii parametrului gender din URL şi se formează astfel
interogarea corespunzătoare:
Pagina 60 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
<table>
<tr>
<td>Name</td>
<td>Gender</td>
<td>Height</td>
<td>Weight</td>
<td>Haircolor</td>
<td>Eyescolor</td>
<td>Marital status</td>
<td>Smoker</td>
<td>Country</td>
</tr>
<?php
if(isset($_GET["gender"])){
$query="SELECT * FROM members WHERE gender='". $_GET['gender']. "'
ORDER BY NAME ";
$result=mysql_query($query);
while($row=mysql_fetch_array($result)){
?>
<tr>
<td><?php echo $row["name"]; ?></td>
<td><?php echo $row["gender"]; ?></td>
<td><?php echo $row["height"]; ?></td>
<td><?php echo $row["weight"]; ?></td>
<td><?php echo $row["haircolor"]; ?></td>
<td><?php echo $row["eyescolor"]; ?></td>
<td><?php echo $row["maritalstatus"]; ?></td>
<td><?php echo $row["smoker"]; ?></td>
<td><?php echo $row["country"]; ?></td>
</tr>
<?php
}
}
Pagina 61 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
?>
</table>
<?php
$id=$_GET["id"];
if(isset($_POST["submit"])){
if(!empty($_FILES["photos"])){
//$status="not ok";
chdir('photos');
chdir("member_".$id);
$uploaddir="C:\Inetpub\wwwroot\licady\photos\member_".$id;
for($i=0;$i<count($_FILES["photos"]);$i++){
if (move_uploaded_file($_FILES["photos"]["tmp_name"][$i], $uploaddir . '/' .
$_FILES["photos"]["name"][$i])) {
$status="ok";
$query_del = "DELETE FROM photos WHERE memberid = ".$id." AND photonr =
".($i+1);
$result_del = mysql_query($query_del);
Pagina 62 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
<?php
if(isset($_POST["submit"])){
$email=$_POST["email"];
$password=$_POST["password"];
Pagina 63 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
$_SESSION['username']=$row['name'];
$_SESSION['userid']=$row['id'];
}
else{
$error=1;
}
}
?>
În caz contrar, este setată o variabilă php numită $error şi este afişat un mesaj de
eroare, iar utilizatorul poate încerca din nou.
Fişierul statusbar.php este cel care realizează afişarea, sub bara de meniu a
informaţiilor legate de starea utilizatorului. După ce utilizatorul este recunoscut îi este afişat
un link prin care poate accesa pagina logout.php, prin care se poate deconecta, iar dacă nici
un utilizator nu este conectat, este afişată o legătură către pagina login.php.
<table width="800">
<tr>
<td align="left">
<?php
if(isset($_SESSION['username']) && isset($_SESSION['userid']))
echo "Welcome, ".$_SESSION['username']."!";
else echo "Welcome, Visitor!";
?></td>
<td align="right">
<?php
if(isset($_SESSION['username']) && isset($_SESSION['userid']))
echo '<a href="logout.php">Logout</a>';
else echo '<a href="login.php">Login</a>';
?></td>
</tr>
</table>
Pagina 64 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.
Toate paginile folosite pentru navigare în cadrul site-ului trebuie să apeleze funcţia
session_start(). Aceasta permite determinarea stării utilizatorului: conectat sau neconectat.
Anumite pagini ale site-ului permit accesul numai pentru utilizatorii conectaţi. Pentru aceasta,
respectivele pagini trebuie să realizeze o verificare a variabilelor din scope-ul $_SESSION,
iar în cazul în care utilizatorul nu este conectat, este redirectat către pagina login.php, astfel:
session_start();
if( !isset($_SESSION['username'])|| isset($_SESSION['userid']) ){
header("Location: login.php");
}
<?php
session_start();
if( isset($_SESSION['username']) && isset($_SESSION['userid']) ){
unset($_SESSION['username']);
unset($_SESSION['userid']);
header("Location: index.php");
}
?>
Pagina 65 din 65