Arhitectura Soft Pentru Un Magazin Online Care Ofera Servicii de Gazduire Pagini Web

LUCRARE DE ABSOLVIRE

Arhitectura soft pentru un magazin online care ofera servicii de gazduire pagini web

Cuprins

CuprinsIntroducere

Capitolul 1 – Structura generala

1.1 Servicii de gazduire

1.2 Domenii

1.3 E-mail

1.4 Coșul de cumparaturi

1.5 Casa

1.6 Structura site

Capitolul 2 – MySQL

2.1 Colecții de date

2.2 Ce este MySQL

2.3 Ce înseamnă SQL?

2.4 Comenzi

Capitolul 3 – PHP

3.1 Intro

3.2 Variabile

3.3 Operatori

3.4 Structuri de control

3.5 Funcții

3.6 Funcții predefinite

Capitolul 4 – HTML

4.1 Noțiuni introductive

4.1.1 Ce este HTML

4.1.2 Proprietățile de bază HTML

4.2 Elemente de bază HTML

4.2.1 Structura unui document HTML

4.2.2 Legături HTML

4.2.3 Alte elemente HTML

4.3 Formulare HTML

4.3.1 Introducere

4.3.2 Casete cu text

4.3.3 Suprafețe cu text

4.3.4 Casete cu parolă

4.3.5 Casete de validare

4.3.6 Butoane radio

4.3.7 Crearea de selecții

4.3.8 Control de tip fișier

4.3.9 Crearea câmpurilor ascunse

4.3.10 Butoane

4.3.11 Elemente apărute recent

Capitolul 5 – Prezentarea lucrării „Magazin servicii gazduire”

5.1 Prima pagină

5.2 Gazduire domenii

5.3 Inregistrare domenii

5.4 Gazduire email

5.5 Coșul de cumpărături

Capitolul 6 – Securitate

Concluzi

Bibliografie

Introducere

Putem sa localizam inapoi in timp  internetul la primele zile ale retelelor de computere de la sfarsitul anilor 1960. In iulie 1968, Departamentul american al Apararii, Advanded Research Project Agency (ARPA) sau Agentia de Proiectare a Cercetarior Avansate a emis o propunere cerand dezvoltarea protocoalelor de unire a patru locatii: Instititul de Cercetare Stanford, Universitatea California din Los Angeles, Universitatea California din Santa Barbare si Universitatea din Utah.

Acestea au fost legate in toamna anului 1969, si reteaua a fost numita ARPAnet. Facilitatile disponibile erau limitate, dar utilizatorii putea sa se logheze de la distanta, adica un user de la Universitatea din Los Angeles putea sa se logheze intr-un calculator de la Universitatea din Utah si putea transfera fisiere intre sisteme.
Pana in anul 1981, 200 de site-uri au fost conectate prin ARPAnet, care a fost compusa din multe retele incompatibile ce foloseau tipuri diferite de tehnologii. Problemele permiterii comunicatiei intre useri ce foloseau diferite tipuri de tehnologie au fost rezolvate partial de catre specificarea protocoalelor de comunicatii, TCP si ip.
Pana la mijlocul anilor 1980, toate retelele din Statele Unite si multe din retelele inter-universitare din toata lumea foloseau protocoale TCP/IP pentru a comunica. Odata cu cresterea folosirii internetului, unele afaceri au inceput sa inteleaga ca poate fi o resursa buna de exploatat. Niciodata inainte nu a exitat un mediu cu capacitatea de a ajunge la atatia oameni pe o arie geografica atat de intinsa in atat de putin timp.
Aceasta caracteristica a fost accentuata de faptul ca influenta World Wide Web-ului, un mecanism pentru publicarea informatiei si oferirea de servicii electronice pentru oricine dispuena de acces la Internet. World Wide Web-ul a fost prima data implementat in anul 1992, cand erau 50 de servere web. Pana la sfarsitul anului 1993 erau 700 servere pe web si la sfarsitul mileniului numerul serverelor implicate erau atat de mari, incat nimeni nu e pregatit sa faca o estimare asupra cate servere web exista cu adevarat, sau cat de repede creste numarul acestora.

Capitolul 1

Structura generală

Cea mai importantă parte în programare este organizarea preliminară, aceasta ne scutește de posibile neplăceri ca rescrierea codului sau modificarea acestuia, și implicit ne ajută să castigăm timp fiind o practica obișnuita în firmele de software. Știind dinainte cum vrem să funcționeze și să arate o aplicație, când trecem la scrierea codului ne putem concentra exclusiv asupra codului.

Folosind aceasta aplicație vizitatorii au posibilitatea sa cumpere online servicii pentru gazduirea paginilor web. Dorim ca vizitatorii să poată vedea produsele si preturile aferente lor, faptul ca pot deveni parteneri la acest magazin online daca opteaza pentrul programul de afiliere si adresa de contact in caz ca vor sa trimita un mesaj moderatorului site-ului. La fel ca și într-un magazin real, produsele si serviciile sunt afisate pe o pagina web si aici se pot vedea pachetele de servicii pentru fiecare produs si preturile fiecarui produs sau pachet de servicii.

În continuare am să descriu acest magazin online care din cauza ca vinde servicii exclusiv pentru mediul online nu are echivalent in lumea reala.

1.1 Servicii de gazduire

Pe aceasta pagina sunt prezentate pachetele cu servicii de gazduire pagini web, incepand de la cel mai ieftin produs pana la cel mai scump. De obicei serviciile mai ieftine presupun mai putin spatiu de stocare, trafic mai scazut ca viteza si mult mai multe optiuni. Cei care aleg servicii de gazduire mai ieftine sunt de obicei persoanele fizice care vor sa aiba un website, indiferent ca e un magazin online sau pur si simplu un website de prezentare pentru ca pachetul standard acopera toate nevoile unui astfel de site.

Pachetele mai scumpe sunt recomandate firmelor care au nevoie de mai mult trafic si o viteza mai mare, care au probabil o baza de date mai complexa si mare cu fisiere de tip video sau sunet etc.

Prin urmare aceasta pagina arata vizitatorului care sunt optiunile sale cand cumpara gazduire de pagini web si in functie de acestea se va hotara asupra produsului dorit.

1.2 Domenii

In aceasta pagina se vand domenii web. Pagina are o functie de cautare pentru a verifica daca domeniul dorit este disponibil pentru vanzare si o lista cu preturile fiecarui domeniu disponibil.

1.3 E-mail

In aceasta pagina sunt prezentate serviciile refritoare la casutele de email. Utilizatorii pot sa isi cumpere casute de email care sunt gazduite la serverul firmei ce vinde acest produs, pe pagina sunt prezentate cateva pachete cu preturile afisate si serviciile care sunt disponibile in fiecare pachet.

1.4 Coșul de cumpărături

În momentul în care un cumpărător apasă butonul „adaugă în coș” el va fi redirecționat spre o altă pagină în care poate vedea conținutul coșului și valoarea produselor.

Cumpărătorul are două opțiuni: fie să termine cumpărăturile și să plateasca, fie să continue cumpărăturile.

1.5 Casa

Plata se face prin ordin de plata. Utilizatorul, dupa ce face comanda, primeste factura pe email. Procedeul este destul de complex dar prin acest proces comanda este procesata, introdusa in baza de date si de asemenea se trimite o factura de format PDF clientului la casuta de email.

1.6 Structura site

.Zona Publica:

index.php-prima pagină

gazduire-domenii.php-pagina în care afișăm produsele si serviciile referitoare la gazduire paginilor web

inregistrare-domenii.php-pagina în care afișăm preturile si serviciile referitoare la domeniile web plus functia de cautare pentu a afla dac domeniul dorit este disponibil

gazduire-email.php-pagina în care afișăm produsele si serviciile referitoare la adresele de email.

cart.php-pagina unde vizitatorul poate vedea și edita conținutul coșului de cumpărături.

casa.php-formularul de introducere a datelor pentru comandă

prelucrare-comanda.php-pagina care prelucrează datele trimise din casa.php, le introduce în baza de date și trimite email de notificare.

Capitolul 2

MySQL

2.1 Colecții de date

Baza de date este, în trei cuvinte, o colecție organizată. Ca exmple putem da cartea de telefon sau programul TV. În cartea de telefon gasim numărul abonatului, numele acestuia, adresa, toate acestea ordonate după nume, pentru a căuta mai ușor o anumită persoană. Dacă aceste date ar fi stocate într-o bază de date am putea să le ordonăm după anumite chei, de exemplu: nume sau stradă, sau am putea afla câți abonați au numele de Ion, și așa mai departe.

Având o bază de date putem scurta din timpul de execuție al multor activități cotidiene care ne răpesc atât de prețiosul „timp liber”.

O bază de date este formată din unul sau mai multe tabele (tables) care, la rândul lor, sunt formate din înregistrari dispuse în câmpuri (fields).

O bază de date poate avea un număr impresionant de înregistrări. Pe siteul www.mysql.com se relatează că la această oră există baze de date pe MySQL Server care au 60000 de tabele și 5 miliarde de înregistrări. Cum ar fi să stocăm toată acestă informație pe suport de hârtie?

2.2 Ce este MySQL?

MySQL este cel mai popular sistem de management pentru baze de date relaționale deoarece este Open Source, adică poate fi folosit fără să fim nevoiți să plătim vreo sumă de bani. MySQL Server a fost creat pentru a lucra cu baze de date mai rapid decât soluțiile existente deja și este folosit de ani buni în medii foarte solicitante.

Într-o bază de date relațională datele sunt stocate în mai multe tabele separate, fiind astfel îmbunătățite viteza și flexibilitatea. Tabelele pot fi legate prin relații definite de noi, fiind astfel posibil să combinăm la cerere datele din mai multe tabele.

2.3 Ce înseamnă SQL?

SQL, acronimul pentru „Structured Query Language”, este limbajul standard pentru comunicarea cu bazele de date. Comenzile SQL sunt folosite pentru a interacționa cu baza de date (adăugare, modificare, ștergere, etc.). Alte sisteme care folosesc SQL sunt MicrosoftSQL Server, Acces, Oracle, Sybase.

Acesta este modul in care o baza de date lucreaza cu un server. PhpMyAdmin este un pachet de scripturi php care ma va ajuta sa gestionez baza de date folosind o interfata web.

In poza de mai jos va este aratat cum arata acest pachet de scripturi php numit phpMyAdmin.

2.4 Comenzi

Dupa ce am descarcat de pe internet ultima versiune de phpMyAdmin, trebuie sa-l dezarhivez si sa pun folderul in directorul www. Accesez apoi in folderul phpMyAdmin si deschid fisierul config.inc.php. Caut si editez liniile 84, 85 si 86 care arata cam asa:

$cfg['Servers'][$i]['auth_type'] = 'config'; // Authentication method (config, http or cookie based)?

$cfg['Servers'][$i]['user'] = 'root'; // MySQL user

$cfg['Servers'][$i]['password'] = ‘’; // MySQL password (only needed

Modific modul de autentificare si aleg in loc de config, cookie astfel incat linia sa fie:

$cfg['Servers'][$i]['auth_type'] = 'cookie';

apoi setez o parola secreta pentru modul de autentificare. Caut linia $cfg['blowfish_secret'] = ''; si setez in interiorul ei un cuvant, de exemplu $cfg['blowfish_secret'] = 'baubau';

Dupa ce am facut aceste modificari, este recomandat ca in locul user-ului root, sa creez un altul cu mai putine drepturi. Accesez in phpMyAdmin ca root si creez un nou utilizator apoi il setez in config.inc.php. Accesez apoi http://localhost/phpmyadmin si observ ca va cere un user si o parola pentru a ma autentifica. Introduc username root iar ca parola, introduceti cea setata de mine anterior.

EasyPHP – acest pachet nu seteaza o parola de inceput (default) pentru baza de date, acest lucru il fac eu. Fara sa fmodificn fisierul acesta de configurare, accesez http://localhost/phpmyadmin dupa ce am pus folderul phpMyAdmin in www.

Dupa ce s-a incarcat pagina, apas pe legatura “Drepturi de acces” (daca interfata este in limba romana), daca este in engleza, apas pe “Privileages”. Acest buton se afla in mijlocul paginii. Va incarca pagina cu drepturile de acces asupra MySQL-ului, apoi apas pe butonul ce l-am incercuit in poza de mai jos.

Apoi in dupa ce s-a incarcat urmatoarea pagina, cauti unde apare ”Schimbare parola” si bifati ”Parola”, apoi tastez parola dorita in prima si in a-II-a casuta, dupa care apas pe butonul „Executa”. Acum este setata o parola la baza de date MySQL, urmatorul pas este sa ma intoarc la fisierul config.inc.php si sa ii setez parola in campul $cfg['Servers'][$i]['password'] = ‘’; si anume

$cfg['Servers'][$i]['password'] = ‘parolamysql’;

O baza de date este coloana vertebrala a unui site dinamic. Ea este alcatuita din tabele care, la randul lor, sunt formate din inregistrari dispuse in campuri.

In prima poza apare bazaaza o parola de inceput (default) pentru baza de date, acest lucru il fac eu. Fara sa fmodificn fisierul acesta de configurare, accesez http://localhost/phpmyadmin dupa ce am pus folderul phpMyAdmin in www.

Dupa ce s-a incarcat pagina, apas pe legatura “Drepturi de acces” (daca interfata este in limba romana), daca este in engleza, apas pe “Privileages”. Acest buton se afla in mijlocul paginii. Va incarca pagina cu drepturile de acces asupra MySQL-ului, apoi apas pe butonul ce l-am incercuit in poza de mai jos.

Apoi in dupa ce s-a incarcat urmatoarea pagina, cauti unde apare ”Schimbare parola” si bifati ”Parola”, apoi tastez parola dorita in prima si in a-II-a casuta, dupa care apas pe butonul „Executa”. Acum este setata o parola la baza de date MySQL, urmatorul pas este sa ma intoarc la fisierul config.inc.php si sa ii setez parola in campul $cfg['Servers'][$i]['password'] = ‘’; si anume

$cfg['Servers'][$i]['password'] = ‘parolamysql’;

O baza de date este coloana vertebrala a unui site dinamic. Ea este alcatuita din tabele care, la randul lor, sunt formate din inregistrari dispuse in campuri.

In prima poza apare baza de date cu numele “tutorial” cu tabela “formular”. In a-II-a poza, apar inregistrarile (coloanele) din cadrul tabelei formular.

Un rand din baza de date se alcatuieste din:

1) Un nume, dupa cum vedeti in coloana camp. Acest nume nu poate contine spatiu.

2) O valoare tip care difera coloana la coloana.

Cele mai folosite tipuri sunt:

Tipuri numerice:

INT – Stocare octeti 4

BIGINT – 64 biti

Tipuri de sir:

CHAR – Interval 1-255 caractere

VARCHAR – Interval 1-255 caractere

Tipuri de text:

TEXT – Lungime maxima de caractere 65.535

LONGTEXT – Lungime maxima de caractere 4.294.967.295

Binenteles, se pot folosi si alte tipuri pentru datele introduse in baza de date, insa o sa lucram numai cu

acestea.

Exemple de folosire phpMyAdmin

Crearea unei baze de date

Accesez http://localhost/phpmyadmin/ si apoi observ in mijloc campul “Creaza baza de date noua”. Scriu numele bazei de date pe care doresc sa o creez, dupa care apas butonul “Creaza”.

Sa luam ca exemplu, baza de date cu numele tutoria. Dupa ce am creat baza de date cu numele tutorial, voi observa ca in partea stanga apare numele acesteia, iar

in mijloc este scris textul “Nu s-a gasit nici un tabel in baza de date.”. Pentru a adauga un tabel in baza meaa de date, trebuie sa complectez campul “Creaza tabela noua in baza

de date tutorial:”.

In casuta campul “Nume” introduc numele tabelei ce va apare in baza de date tutorial, iar in casuta “Campuri” introduc numarul de randuri ce le va avea aceasta tabela.

Sa luam ca exemplu: Nume: formular

Campuri: 4

Apas butonul “Executa”

Vom observa ca apar campurile: “Camp”, “Tip”, “Lungime”. O prima adaugare in orice baza de date, este bine sa fie un camp cu numele id, iar ca tip sa fie INT, si o

setare speciala pentru aceasta prima linie din tabela noastra, este alegerea valorii auto_increment din categoria “Extra”, si apoi trebuie sa bifez optiunea primar

dupa care adaug pe rand in coloana “Camp” urmatoarele: nume , prenume , varsta.

Ca Tip pentru aceste 3 intrari, alegeti CHAR, apoi in coloana “Lungime/Setare” adaug o valoare numerica, adica numarul de caractere maxime care sa poata intra in acel rand.

Exemplu: Pentru coloana camp cu valoarea “nume” o sa avem ca tip CHAR si lungime 30. Asta inseamna ca pot sa introduc un text mai mic sau egal cu 30 caractere.

Dupa ce am introdus datele precum am spus mai sus si am aratat in poze, apas butonul “Salveaza”.

In urmatoarele 2 poze vedeti ca tabelul a fost creat, vi se arata comanda SQL, dupa care se listeaza aceasta tabela.

Dupa ce am creat baza de date cu numele tutorial si tabela cu numele formular, doresc sa adaug informatii in aceasta tabela. Sus in pagina aveti un meniu:

Apas pe butonul “Inserare”

Completez campul “Valoare” cu datele pe care doresc sa le introduc in formular pentru fiecare in valorile casutei “Camp”. Si anume:

Nu completez casuta id de dip INT deoarece aceasta este folosita pentru a adauga un numar UNIC pentru fiecare intrare din baza de date. De exemplu, daca adaug 2 intrari, numarul primei intrari va fi 1, iar al urmatoarei intrari va fi 2. Daca sterg intrarea cu numarul 2 si adaug o noua intrare, id-ul acesteia va fi 3 nu 2, deoarece valoarea campului id de tip INT nu se updateaza (in sensul ca se rearanjeaza numarul din dreptul fiecarei intrari) in momentul in care se sterge o intrare din tabela. Dupa ce am adaugat informatii in casuta “Valoare”, apas butonul “Executa”.

La fel ca si in atunci cand am adaugat o tabela, voi vedea o sintaxa SQL. Pentru a vizualiza datele adaugate in tabela formular, apas pe butonul “Navigare” din partea de sus a pagini.

In aceasta instanta vedeti ca pot edita / sterge aceasta intrare. Mai adaug o intrare in acest tabel efectuand acelasi procedeu ca cel de mai sus si apas din nou butonul navigare.

Apas pe textul “nume” sau “prenume” sau “varsta” si observ ca listarea intrarilor se modifica in ordinea adaugarii lor in tabela. Sus observ sintaxa SQL. Listarea poate fi ASC (ascendenta), adica afisarea intrarilor pornind cu ultima intrare si sfarsind cu prima intrare, sau DESC (descendenta), adica afisarea intrarilor pornind cu prima intrare si sfarsind cu ultima.

Conectarea la MySQL folosind PHP

In partea aceasta a lucrarii o sa va arat cum sa ne conectam la o baza de date, cum sa citim informatii din ea, cum sa le stergem/modificam sau cum sa adaugam noi informatii cu ajutorul scripturilor PHP.

Se creaza un folder in directorul radacina a serverului dumneavoastra apache (www) cu numele tutorial. Cream un fisier cu numele config.php in care pun urmatorul cod:

<?php

// Informatii baza de date

$AdresaBazaDate = "localhost";

$UtilizatorBazaDate = "root";

$ParolaBazaDate = "parola_mysql";

$NumeBazaDate = "tutorial";

$conexiune = mysql_connect($AdresaBazaDate,$UtilizatorBazaDate,$ParolaBazaDate)

or die("Nu ma pot conecta la MySQL!");

mysql_select_db($NumeBazaDate,$conexiune)

or die("Nu gasesc baza de date!");

?>

Acesta este fisierul de configurare cu care voi realiza conexiunea la baza mea de date. Modific valoarea variabilei $ParolaBazaDate cu parola pe care am setat-o bazei de date. Variabila $AdresaBazaDate este definita cu valoarea localhost deoarece aceasta este adresa serverului. (Adica, serverul Apache+PHP este instalat pe acelasi calculator ca si pachetul MySQL)

Variabila $UtilizatorBazaDate este definita cu valoarea root, acesta fiind utilizatorul cu toate drepturile de acces asupra bazei de date, administratorul.

Variabila $NumeBazaDate este definita cu valoarea tutorial, aceasta fiind numele bazei de date asupra careia lucram. Salvam si inchidem fisierul.

SELECT

Creez un nou fisier cu numele extragere_date.php si introduc in el urmatorul cod:

<?php

require_once('config.php');

// Selectare dare din baza de date

$cerereSQL = 'SELECT * FROM `formular`';

$rezultat = mysql_query($cerereSQL);

while($rand = mysql_fetch_array($rezultat)) {

echo $rand['nume'];

}

?>

Salvez fisierul si apoi accesez in browser: http://localhost/tutorial/extragere_date.php. Observam ca daca am introdus o singura valoare in campul nume din tabela formular, aceasta se va afisa pe pagina, daca sunt mai multe intrari ele se vor afisa una in continuarea celeilalte. Pentru a le afisa una sub alta modific linia echo $rand['nume']; in echo $rand['nume'].’<br>‘;

Acum sa analizez codul PHP:

Prima linie din script trebuie sa fie functia require_once, functie care include, o singura data, in pagina noastra extragere_date.php pagina config.php; adica datele din config.php vor fi transmise in pagina mea.

$cerereSQL = 'SELECT * FROM `formular`'; – In aceasta linie am variabila $cerereSQL cu valoarea cererii SQL pentru a extrage datele din tabela formular. Ea se interpreteaza cam asa: SELECTEAZA tot DIN formular.

$rezultat = mysql_query($cerereSQL); – In aceasta linie am variabila $rezultat cu valoarea functiei mysql_query, functie care realizeaza deschiderea conexiunii.

while($rand = mysql_fetch_array($rezultat)) {

echo $rand['nume'];

} – Bucla while.

echo $rand['nume']; – In acest echo apar valorile coloanei nume din tabelul formular.

In interiorul acestei bucle pot afisa si prenumele, si varsta, modificand constructia echo, si anume:

echo $rand['nume'].' '.$rand['prenume'].' '.$rand['varsta'].' <br>';

Salvam si apoi testam in browser.

In cazul meu, am 2 intrari in tabela formular si anume:

In cererea noastra SQL am selectat * adica tot din tabela formular, insa se poate selecta numai un camp sau mai multe.. si anume:

$cerereSQL = 'SELECT `nume,prenume` FROM `formular`';

Sintaxa SELECT este mult mai completa decat am prezentat-o pana acum si anume:

SELECT

[ALL | DISTINCT | DISTINCTROW ]

[HIGH_PRIORITY]

[STRAIGHT_JOIN]

[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]

[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]

select_expr, …

[INTO OUTFILE 'file_name' export_options

| INTO DUMPFILE 'file_name']

[FROM table_references

[WHERE where_definition]

[GROUP BY {col_name | expr | position}

[ASC | DESC], … [WITH ROLLUP]]

[HAVING where_definition]

[ORDER BY {col_name | expr | position}

[ASC | DESC] , …]

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

[PROCEDURE procedure_name(argument_list)]

[FOR UPDATE | LOCK IN SHARE MODE]]

Iau urmatorul exemplu, pentru a selecta tot din tabela formular, si sa ii pun o conditie WHERE.

<?php

require_once('config.php');

// Selectare dare din baza de date

$cerereSQL = 'SELECT * FROM formular WHERE nume="orice" ';

$rezultat = mysql_query($cerereSQL);

while($rand = mysql_fetch_array($rezultat)) {

echo $rand['nume'].' '.$rand['prenume'].' '.$rand['varsta'].' <br>';

}

?>

Salvez si apoi vizualizez in browser. Observati ca avem conditia WHERE nume="orice", iar rezultatul o sa fie numai prima linie din tabela formular, deoarece primul nume de acolo este egal cu numele dat de noi in conditie.

INSERT

Sintaxa insert se foloseste pentru a adauga date in baza de date. Iau urmatorul exemplu:

<?php

require_once('config.php');

$cerereSQL = "INSERT INTO `formular` (`nume` , `prenume`, `varsta`)

VALUES ('Ivascu', 'Valentin', '20')";

mysql_query($cerereSQL);

echo 'Am adaugat valorile in baza de date';

?>

Creez un fisier nou in folderul tutorial si il numesc introducere_date.php, apoi introduc codul PHP de mai sus, salvez si vizualizez in browser. Apoi accesezm baza de date prin scriptul phpMyAdmin, accesez tutorialul, dupa care apas pe tabela formular si sus pe butonul “Navigare”.

Sintaxa INSERT este mult mai completa decat am prezentat-o pana acum si anume:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name [(col_name,…)]

VALUES ({expr | DEFAULT},…),(…),…

[ ON DUPLICATE KEY UPDATE col_name=expr, … ]

sau:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name

SET col_name={expr | DEFAULT}, …

[ ON DUPLICATE KEY UPDATE col_name=expr, … ]

sau:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name [(col_name,…)]

SELECT …

[ ON DUPLICATE KEY UPDATE col_name=expr, … ]

UPDATE

Sintaxa update se foloseste pentru a modifica datele existente din baza de date. Iau urmatorul exemplu:

<?php

require_once('config.php');

$cerereSQL = "UPDATE `formular` SET nume='nume', prenume='prenume' WHERE nume='orice' ";

mysql_query($cerereSQL);

echo 'Am modificat valorile campurilor nume si prenume unde numele este orice in baza de

date';

?>

Creez un fisier nou in folderul tutorial, il numesc modificare_date.php si introduc codul PHP de mai sus, dupa care salvez si vizualizez in browser. Accesez baza de date prin phpMyAdmin si se observa ca prima coloana a fost modificata.

Sintaxa UPDATE este mult mai completa decat am prezentat-o pana acum si anume:

Sintaxa simpla

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name

SET col_name1=expr1 [, col_name2=expr2 …]

[WHERE where_definition]

[ORDER BY …]

[LIMIT row_count]

Sintaxa multipla

UPDATE [LOW_PRIORITY] [IGNORE] table_references

SET col_name1=expr1 [, col_name2=expr2 …]

[WHERE where_definition]

DELETE

Sintaxa delete se foloseste pentru a sterge datele existente din baza de date. Iau urmatorul exemplu:

<?php

require_once('config.php');

$cerereSQL = "DELETE FROM `formular` WHERE nume='nume'";

mysql_query($cerereSQL);

echo 'Am sters coloana cu campul nume = nume din baza de date';

?>

Creez un fisier nou in folderul tutorial si il numesc stergere_date.php, introduc codul PHP de mai sus, salvez si vizualizez in browser. Accesez baza de date prin phpMyAdmin si se observa ca prima coloana a fost stearsa.

Sintaxa DELETE este mult mai completa decat am prezentat-o pana acum si anume:

Sintaxa simpla

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name

[WHERE where_definition]

[ORDER BY …]

[LIMIT row_count]

Sintaxa multipla

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]

tbl_name[.*] [, tbl_name[.*] …]

FROM table_references

[WHERE where_definition] sau:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]

FROM tbl_name[.*] [, tbl_name[.*] …]

USING table_references

[WHERE where_definition]

Capitolul 3

PHP

3.1 Intro

Php este limbajul ideal pentru construirea de pagini web dinamice. Este ușor de învățat, open source, poate fi rulat pe mai multe platforme și se poate conecta la mai multe tipuri de baze de date.

Cel mai important aspect al limbajului este însă posibilitatea de a fi îmbricat cu cod HTML. Putem astfel crea pagini HTML statice și din loc în loc, acolo unde este nevoie, să introducem dinamism cu ajutorul PHP.

Limbajul PHP „s-a născut” în 1994 din nevoia lui Rasmus Lerdorf de a afla câte persoane îi vizualizează CV-ul on-line. El a denumit setul de scripturi create PHP, acronimul pentru Personal Home Page. Pe parcursul urmatorilor 3 ani a evoluat dar adevăratul succes a început să îl cunoască de când Zeev Suraski și Andi Gutmans au rescris motorul PHP de la cap la coadă, motor care poartă din versiunea 4 PHP numele ZEND, o combinație de litere din prenumele creatorilor săi: Zeev și Andi.

Fiind open source, PHP beneficiază de suport activ din partea comunității on-line, acesta fiind și motivul creșterii explozive a numărului site-urilor bazate pe PHP. Între 2000 și 2002 numărul lor a crescut cu peste 13130 % în timp ce numărul site-urilor bazate pe tehnologia ASP doar cu 278%, Java Server Pages cu 1594 %, și ColdFusion cu 429%.

Programarea de orice fel, nu doar PHP, are 2 elemente de bază: datele și instrucțiunile. Pentru a lucra cu datele trebuie să înțelegem ce sunt variabilele și tipurile iar pentru a lucra cu instrucțiuni trebuie să aflăm ce sunt structurile de control și funcțiile.

3.2 Variabile

O variabilă este o zonă de memorie căreia i se dă un nume pentru a putea fi recunoscută ulterior și pentru a ne putea referi mai târziu la ea.

$primul_numar=3;

$al_doile_numar=2;

$total=$primul_numar+$al_doile_numar;

Valoarea variabilei $total este suma celor două numere, 5 în acest caz. La a doua operație de adunare este ținut în memorie primul număr și este schimbată valoarea celui de-al doilea număr după care obținem un nou rezultat.

$al_doilea_numar=5;

$total=$primul_numar+$al_doile_numar;

Valoarea variabilei $total se schimbă, deoarece am schimbat unul din elementele ecuației. Înțelegem acum de ce sunt numite variabilele așa: pentru că valoarea lor poate fi schimbată ori direct, cum am schimbat în a doua operație valoare lui $al_doilea_numar din 3 în 5, ori ca urmare a dependenței lor de alte variabile, așa cum se schimbă valoarea variabilei $total în funcție de valorile lui $primul_numar și $al_doile_numar.

Pentru a înțelege mai bine conceptul de variabilă, putem face o comparație cu algebra. Dacă luăm un număr x și îi dăm valoarea 1, x+1=1, x+2=2. Dacă x=7, x+1=8 și x+2=9. Analog, putem scrie următorul cod PHP într-un fișier numit algebră.php.

<html>

<body>

<h1>Variabile</h1>

<?

//setam valoarea lui x ca fiind 1

$x=1;

$rezultat=$x+1;

Print “Rezultatul adunarii lui $x cu 1 este $rezultat<br>”;

/* si acum sa setam valoarea lui $x ca fiind 7 si il vom aduna

tot cu 1 */

$x=7;

$rezultat=$x+1;

Print “Rezultatul adunarii lui $x cu 1 este $rezultat <br>”;

?>

</body>

</html>

Iată cum va arăta pagina afișată:

Să disecăm codul pentru a vedea câteva caracteristici ale PHP.

-toate instrucțiu- nile PHP se termină cu ;. Omiterea acestora este cea mai frecventă greșeală pe care o fac programatorii începători.

-codul PHP începe întotdeauna cu <? și se termină cu ?>.

-el poate fi combinat cu cod HTML dupa cum se observă și în acest exemplu.

-pot fi create pagini HTML fără cod php în ele și să fie salvate cu extensia php.

-valoarea unei variabile poate fi schimbată după necesități sau poate fi schimbată automat în funcție de celelalte variabile de care depinde.

-pentru a afișa rezultatul folosim print, altfel valorile variabilelor ar fi fost schimbate dar nu ar fi fost afișate pe ecran.

-linia din text care începe cu // nu este afișată, la fel ca textul demarcat de /*….*/ și nu apar nici macar dacă dăm View Source în Browser pentru fișierul accesat, acestea sunt comentarii care nu sunt procesate de către server.

-numele variabilelor trebuie să conțină doar litere (a..z, A..Z) și caracterele ASCII de la 127 la 255, cifre și liniuțe de subliniere și pot începe doar cu litere sau liniuțe de subliniere.

Variabilele pot fi de mai multe tipuri, nu doar numere cum am văzut până acum. PHP are 8 tipuri de variabile dintre care voi descrie 4 cele mai importante.

Integer-variabilele de acest tip sunt numere întregi: 3,765, -56 sunt valori integer.

String- un string este o succesiune de caractere (șir). Atunci când sunt folosite în codul PHP stringurile trebuie încadrate între ghilimele și toate caracterele speciale din ele precedate cu semnul \ .

Boolean –acest tip definește o valoare de adevăr, True sau False.

Array- putem să considerăm un array ca fiind o colecție de obiecte (matrice).

Un exemplu poate fi o listă de casete video de la un centru de închirieri:

<?

$filme=array(“Casablanca”,”Rambo”,”Matrix”);

/*pentru a vedea continutul folosim indexul numeric

Pentru a cere Rambo scriem */

print $filme[1];

?>

Indexarea poate fi făcută si asociativ folosind stringuri sau valori integer:

<?

$filme=array(“SF”=>”Matrix”, “dragoste”=>”Casablanca”, “23”=>”Rambo”)

//elementele pot fi referite prin indexul corespunzător

//pentru Matrix

print $filme[“SF”];

//iar pentru Rambo

print $filme[23];

?>

3.3 Operatori

Cel mai des întâlnit operator este cel de atribuire, definit de semnul =. Am observat din exemplele de până acum că dacă scriem $x=1 nu înseamnă ca $x este egal cu 1 ci că i s-a acordat valoarea 1. Deși la prima vedere egalitatea și acordarea valorii pot părea a fi același lucru, ele nu sunt! Să considerăm urmatoarele variabile:

$X=1;

$Y=7;

Este $x egal cu $y? Nu este. Valoarea lui $x este 1 în timp ce valoare lui $y este 7. Folosind operatorul = de atribuire îi putem acorda lui $x valoare lui $y:

$x=1;

$y=7;

$x=$y;

Abia acum $x este 7 și este egal cu $y care are și el valoarea 7.

Operatorul de egalitate este == și se folosește cel mai des în propoziții condiționale, pentru a testa egalitatea. Opusul său, !=, este operatorul de inegalitate și se folosește în același scop. Pentru a ne lămuri cum stă treaba cu egalitatea și atribuirea , testăm următorul cod:

<?

$x=1;

$y=7;

If ($x==$y)

{

print “$x este egal cu $y”;

}

If ($x!=$y)

{

print “$x nu este egal cu $y”;

}

?>

Alți operatori pentru compararea valorilor variabilelor sunt:

> mai mare

>= mai mare sau egal

< mai mic

<= mai mic sau egal

Operatorii pentru stringuri sunt . pentru concatenare și .= pentru atribuirea concatenării.

$test=`Am scris un`.`text`.`oarecare`;

print $test;

Outputul acestei secvențe va fi:

Am scris un text oarecare

3.4 Structuri de control

Acestea sunt instrucțiunile care aduc flexibilitatea în programare și ușurează munca programatorului.Putem cu ajutorul structurilor de control să manipulăm variabilele și rezultatele cu minim de cod. Vom vedea cum, cu ajutorul lui while și for putem folosi aceeași bucată de cod pentru mai multe variabile fără să trebuiască să rescriem codul pentru fiecare valoare a variabilei. Voi prezenta și structurile if….else, if …else și switch cu care vom putea executa cod doar dacă sunt îndeplinite anumite condiții.

while

Această structură de control este folosită pentru a rula același cod pentru mai multe valori ale unei variabile oarecare $x, fără să trebuiască să rescriem codul pentru $x=1, $x=2 și așa mai departe pentru fiecare valoare a variabilei.

Exemplu de program care folosește structura while:

<?

$x=0;

while ($x<100)

{

$rezultat=$x*5;

print “rezultatul inmultirii lui $x cu 5 este $rezultat<br>”;

$x++;

}

Print “SFARSIT!”;

?>

Outputul va fi următorul:

Să vedem, pas cu pas, cum funcționează while. Întâi am definit valoarea inițială a lui $x. Apoi, pentru fiecare valoare a lui $x mai mică strict decât 100 se calculează variabila $rezultat și se afișează textul, iar în final $x este incrementat cu 1, căpătând astfel o nouă valoare, și programul o ia din nou de la capăt cu $x=2, apoi 3 și tot așa până când ajunge la 100, când a ajuns la 100 condiția din while, nu mai este îndeplinită așa că php încetează rularea loop-ului și continuă cu restul de cod.

for

Este echivalentul lui while și funcționează în mare măsură la fel, cu câteva mici diferențe. Să rescriem cu ajutorul lui for codul de mai sus.

<?

For($x=0;$x<100;$x++)

{$rezultat=$x*5;

Print”rezultatul inmultirii lui $x cu 5 este $rezultat<br>”;

$x++}

Print “Sfarsit”;?>

if

Dacă dorim să rulăm o bucată de cod doar când este îndeplinită o condiție anume folosim IF, în urmatorul cod afișăm un text doar dacă numărul de caractere dintr-un string este mai mare decât 5.

<?

$text=”Ana are mere”;

$nr=strlen($text);

If($nr>5)

{

print “Textul $text are mai mult de 5 caractere”;

}

?>

Am folosit în acest exemplu funcția strlen care calculează numărul de caractere într-un string.

if…else

Când dorim să afișăm un text dacă o anumită condiție este îndeplinită și alt text dacă aceasta nu este îndeplinită folosim structura if…else.

<?

$text=”mere”;

$nr=strlen($text);

If($nr>5)

{

print”textul are mai mult de 5 caractere”;

}

Else

{

print”textul are mai putin de 5 caractere”;

}

?>

switch

Este alternativa pentru blocurile condiționale if…else if…else. Este preferabil în cazul în care codul dintre acolade este mai mare și ne-am putea pierde în propoziții condiționale și paranteze. Să vedem un exemplu simplu în care folosim while:

<?

$text=”Ana are mere”;

$nr=strlen($text);

switch($nr)

{

case 4:

print”textul are 4 caractere”;

break;

case 5:

print “textul are 5 caractere”;

break;

case 12:

print “textul are 12 caractere”;

default:

print ”textul nu are nici 4 nici 5 nici 12 caractere”;

break;

}

?>

Cazul special default de la sfârșit este folosit pentru situația în care dorim să executăm cod și dacă nici una din condițiile anterioare nu este îndeplinită. El poate fi omis și astfel să executăm cod doar dacă una din condiții este îndeplinită. Instrucțiunea break trebuie folosită la încheierea fiecărui caz deoarece altfel codul din urmatorul caz va fi executat.

3.5 Funcții

Deși programarea PHP nu este matematică, modul în care tratează funcțiile este similar, spre exemplu, la algebră funcția f(x)=x+1 executa o operație cu x și dădea un rezultat în funcție de x. Același lucru îl face și o funcție PHP.

<?

function calculare($x)

{

$total=$x+1;

print $total;

}

$x=2;

calculare($x);

?>

Acest program va afișa pe ecran numărul 3.

Funcțiile pot căpăta mai mulți parametrii:

<?

Function inmultire($x, $y)

{

$rezultat=$x*$y;

}

$x=5;

$y=6;

print inmultire($x,$y);

?>

Putem de asemenea să dăm parametrii direct, separați prin virgulă:

print inmultire(76,59);

3.6 Funcții predefinite

Toate funcțiile exemplificate până acum au fost definite de noi. Există însă și funcții predefinite, integrate în PHP, pentru o mulțime de acțiuni. Un exemplu este funcția date() care returnează ora, luna, anul precum și alte elemente ale datei. Alt exemplu ar fi funcția count() pe care am folosit-o să numărăm câte elemente sunt într-un array. Există funcții pentru aproape orice în PHP.

Capitolul 4

HTML

4.1 Noțiuni introductive

4.1.1 Ce este HTML?

În mod evident HTML este una dintre principalele tehnologii pe baza căreia este construit sistemul Web. HTML este un limbaj de marcare folosit pentru a asigura structura și formatarea unui fișier de text simplu. Ca „tehnologie”, este relativ banală – unii ar spune chiar depășită – dar tocmai banalitatea conferă forța limbajului.

Deși browser-ul asigură fereastra prin care se afișează utilizatorului conținutul bazat pe Web, conținutul în sine este sub formă de text HTML. Nu contează dacă sunt elemente statice, rezultatul unei interogări, formular de feed-back sau aplicație JavaScript. Indiferent prin mijloacele prin care se obțin aceste date, finalmente ele sunt transformate în etichete HTML pentru prezentare.

4.1.2 Proprietățile de bază HTML

HTML are o serie de proprietăți care stau la baza creării unor documente de un nivel calitativ profesional:

Formatarea documentelor, utilizând stiluri diverse, inclusiv un anumit număr de subtitluri;

Posibilitatea de a include hyperlegături, care indică alte documente Web sau servicii disponibile pe sisteme de calcul din întreaga rețea Internet;

Posibilitatea creării de texte preformatate, inclusiv tabelate;

Posibilitatea de a include imagini grafice, sunete, filme sau alte elemente multimedia direct într-un document HTML, imagini care pot fi hyperlegături către alte documente;

Pictograme-imagine selectabile prin clic, cu zone active care ne conduce în diverse „locuri” are sitului Web, în funcție de zona din imagine în care a fost executat clic.

4.2 Elemente de bază HTML

4.2.1 Structura unui document HTML

Documentele HTML conțin elemente HTML. Aceste elemente sunt definite utilizând etichete (tag-uri – elemente de limbaj specifice HTML). Aceste etichete se află între semnele „<” și „>”. De obicei etichetele apar în perechi de exemplu <b> și </b>.

Structura de bază a unui document HTML este următoarea:

<HTML>

<HEAD>

<TITLE>Titlul paginii<TITLE>

</HEAD>

<BODY>

Conținutul paginii

</BODY>

</HTML>

Eticheta HTML este folosită pentru a defini documentul. Se observă că un document HTML are două secțiuni importante: HEAD, folosită pentru titlu, referințe, scripturi, etc. și secțiunea BODY, unde se află „descrierea” paginii.

Alte etichete folosite des sunt următoarele:

4.2.2 Legături HTML

Într-un document HTML se pot introduce și elemente URL care să facă legătura către alte elemente situate în Internet. Crearea unei legături va arăta astfel: <A HREF=”url”> Text care va apărea evidențiat </A>, unde url reprezintă calea către locația din Internet (http://www.info.uvt.ro) sau de pe discul local (file://home.html).

4.2.3 Alte elemente HTML

Se pot de asemenea crea:

liste ordonate, liste neordonate;

liste de tip glosar;

liste îmbricate;

tabele;

adăuga imagini si elemente multimedia;

sunete de fundal;

secvențe video.

4.3 Formulare HTML

4.3.1 Introducere

Cu excepția includerii hyper-legăturilor și a imaginilor în documente HTML, colectarea datelor de intrare de la utilizatori prin intermediul formularelor este probabil cea mai importantă proprietate a limbajului HTML. Se pot astfel prelua date de la utilizator care pot fi furnizate unor programe și folosite cele mai diverse scopuri, cum ar fi generarea de comenzi sau actualizarea unei baze de date.

În interiorul corpului unei pagini HTML care conține un formular se poate folosi orice etichetă HTML obișnuită. Pentru a descrie formularul în sine, se folosesc etichetele FORM, care are următoarea formă elementară:

<FORM METHOD=”metoda” ACTION=”url”>

Atributul METHOD al etichetei FORM poate lua un din valorile GET sau POST. Atributul ACTION specifică adresa URL a scriptului PHP (sau a unui program extern) care prelucrează datele adunate prin intermediul formularului. Adresa URL poate fi o adresă completă, care include protocolul, numele gazdei și calea de acces, respectiv o adresă parțială, care specifică o locație relativă la locația paginii curente. Între eticheta <FORM> și eticheta sa </FORM> corespunzătoare, se plasează controalele formularului.

Aceste controale pot fi: casete cu text, suprafețe cu text, casete cu parolă, casete de validare, butoane radio, selecții, controale de tip fișier, butoane sau câmpuri ascunse.

4.3.2 Casete cu text

Casetele cu text personalizate permit utilizatorului să tasteze informații care mai pot fi apoi trimise unui program extern sau unui script PHP. Casetele de text sunt frecvent folosite pentru a obține date de la utilizator precum numele, adresa poștală sau adresa de e-mail.

Pentru a crea o casetă cu text, se folosește eticheta următoare:

<INPUT TYPE=”TEXT” NAME=”txt” SIZE=”nr” MAXLENGTH=”nr” VALUE=”txt”>

Atributele TYPE și NAME sunt obligatorii. Atributul NAME atribuie casetei text un nume, astfel încât conținutul său să fie accesibil. Numele trebuie să fie unic în carul formularului. SIZE stabilește dimensiunea vizibilă a casetei de text, iar MAXLENGTH specifică numărul maxim de caractere pe ca utilizatorul le poate tasta. Atributul VALUE constituie o valoare care este afișată inițial în caseta text.

4.3.3 Suprafețe cu text

Crearea suprafețelor cu text permite utilizatorului să introducă mai multe linii de text.

Iată sintaxa pentru crearea unei suprafețe cu text:

<TEXTAREA NAME=”txt” ROWS=”nr” COLS=”nr” WRAP=”wrap”>

Atributele NAME și ROWS sunt obligatorii. Atributul ROWS specifică numărul liniilor de text vizibile în suprafața cu text; deoarece suprafața de text defilează după ce a fost umplută, utilizatorul poate introduce linii suplimentare. Atributul COLS specifică numărul de coloane de text vizibile în suprafața cu text; deoarece suprafața cu text se derulează sau se înfășoară după ce s-a umplut, utilizatorul poate introduce linii mai lungi. Atributul WRAP specifică maniera de înfășurare a textului în interiorul suprafeței cu text.

O etichetă <TEXTAREA> trebuie combinată cu o etichetă </TEXTAREA>. Orice text care apare între etichete va fi prezentat drept conținut inițial al controlului de tip suprafață cu text.

4.3.4 Casete cu parolă

Dacă o aplicație impune unui utilizator să introducă o parolă atunci vom putem folosi o casetele cu text în acest scop. Totuși, când utilizatorul introduce parola, orice persoană aflată în apropiere poate vizualiza parola, situație care duce la o posibilă breșă de securitate. În loc de a se folosi o casetă cu text pentru introducerea informațiilor confidențiale, trebuie folosită o casetă cu parolă.

Pentru a crea o casetă cu parolă, se folosește aceeași sintaxă ca și cea pentru crearea unei casete cu text, cu excepția faptului că se specifică PASSWORD în loc de TEXT va valoare a atributului TYPE:

<INPUT TYPE=”PASSWORD” NAME=”txt” SIZE=”nr” MAXLENGTH=”nr” VALUE=”txt”>

4.3.5 Casete de validare

Pentru date care pot avea numai una din două valori, caseta de validare este controlul ideal. De exemplu, caseta de validare este un control ideal pentru a permite să opteze pentru livrare rapidă a unui colet. În cazul în care caseta de validare corespunzătoare este validată, coletul va fi livrat mai rapid; în caz contrar, coletul se va deplasa cu mijloacele obișnuite.

Pentru a crea o casetă de validare, se folosește următoarea sintaxă:

<INPUT TYPE=”CHECKBOX” NAME=”txt” CHECKED VALUE=”txt”>

Atributul TYPE este obligatoriu; atributele NAME, CHECKED și VALUE sunt opționale. Dacă atributul CHECKED apare, caseta de validare va fi selectată în mod prestabilita; în caz contrar caseta de validare nu este selectată inițial. Atributul VALUE specifică valoarea care este trimisă serverului în cazul în care caseta de validare este selectată; dacă atributul nu este specificat, se va trimite valoarea on (activat).

4.3.6 Butoane radio

Ca și casetele de validare, butoanele radio pot avea numai una din două valori. Cu toate acestea, butoanele radio sunt organizate în grupuri, iar la un moment dat poate fi activat un singur buton radio din cadrul unui grup; toate celelalte trebuie să fie dezactivate. Butoanele radio sunt utile pentru a permite unui utilizator să aleagă dintr-o serie de alternative mutual exclusive. De exemplu, se poate folosi un set de trei butoane radio pentru a permite utilizatorului să specifice tipul de ambalaj pentru un cadou: fără ambalaj, cu ambalaj simplu sau sofisticat. Numai unul dintre cele trei butoane radio poate fi activat; la un loc, setul de butoane radio oferă utilizatorului o triplă opțiune.

Pentru a crea un buton radio, se folosește următoarea sintaxă:

<INPUT TYPE=”RADIO” NAME=”txt” CHECKED VALUE=”txt”>

De reținut este faptul că aceasta este sintaxa folosită pentru crearea unei casete de validare, cu deosebirea că atributul TYPE are valoarea RADIO în locul valorii CHECKBOX. Atributele unui buton radio au aceeași semnificație ca și acelea ale unei casete de validare. Totuși, atributul NAME este obligatoriu pentru butoanele radio, chiar dacă este opțional pentru casetele de validare. Toți membrii unui set de casete de validare prezintă aceeași valoare a atributului NAME.

4.3.7 Crearea de selecții

O selecție este un meniu care defilează, de unde utilizatorul poate alege unu sau mai multe opțiuni. De exemplu, într-o selecție pot fi enumerate garniturile pentru pizza, astfel încât un utilizator să poată selecta orice combinație de garnituri pe care o dorește.

Pentru a crea o selecție, folosiți următoarea sintaxă:

<SELECT NAME=”txt” MULTIPLE SIZE=”nr”>Eticheta optiune</SELECT>

Eticheta <SELECT> este folosită în combinație cu eticheta </SELECT>. Între cele două etichete este inclusă o serie de etichete <OPTION>.

Într-o etichetă SELECT, numai atributul NAME este obligatoriu. Atributul MULTIPLE arată că utilizatorul poate alege mai multe opțiuni menținând apăsată tasta CTRL și executând clic pe acestea. În absența atributului MULTIPLE, utilizatorul poate selecta o singură opțiune. Dacă este specificat atributul MULTIPLE, atunci trebuie specificat și un atribut NAME, care atribuie un nume de tablou ca nume al controlului. De exemplu un control de tip selecție care permite unui utilizator să aleagă mai multe garnituri pentru desert trebuie denumit folosind sintaxa garnitura[] și nu garnitura

.Comportarea unei selecții care permite o singură opțiune este echivalentă cu aceea a unui set de butoane radio, dar aspectul unei selecții este diferit de acela al unui set de butoane radio. Atributul SIZE specifică numărul opțiunilor vizibile. Prin utilizarea unui buton de derulare în jos sau a unei bare de defilare, utilizatorul poate manipula selecția pentru a obține accesul la restul opțiunilor și a alege dintre acestea.

Așa cum s-a menționat, o selecție este asociată cu una sau mai multe opțiuni. Pentru a crea o opțiune care urmează a fi utilizată în cadrul unei selecții, se folosește următoarea sintaxă:

<OPTION SELECTED VALUE=”txt”>Conținut opțiune</OPTION>

Eticheta <OPTION> este combinată cu o etichetă </OPTION>. Conținutul opțiunii apare în controlul SELECT.

Ambele atribute ale etichetei OPTION sunt opționale. Dacă apare atributul VALUE, valoarea sa este transmisă serverului atunci când este selectată opțiunea asociată; în caz contrar, conținutul opțiunii este trimis la server. Atributul SELECTED arată că opțiunea corespunzătoare este selectată inițial; în caz contrar secțiunea respectivă nu este selectată inițial.

4.3.8 Control de tip fișier

Dintr-un formular se poate permite utilizatorului să aleagă un fișier și să trimită serverului conținutul fișierului creând un control de tip fișier.

Sintaxa este următoarea:

<INPUT TYPE=”FILE” NAME=”nume” ACCEPT=”tip_mime” VALUE=”txt”>

Atributul TYPE este singurul obligatoriu; cu toate acestea, în general, apare și atributul NAME. Atributul VALUE specifică un nume de fișier prestabilit. Atributul ACCEPT specifică formatul conținutului fișierului. Pot fi indicate mai multe formate, dar fiecare format trebuie separat de vecinii săi prin intermediul unei virgule. Formatul este specificat folosind un cod MIME (Multipurpose Internet Mail Extensions).

Eticheta FORM de delimitare trebuie să aibă POST ca valoare a atributului să METHOD. De asemenea trebuie să includă un atribut ENCTYPE cu valoarea multipart/form-data. Iată sintaxa care trebuie folosită:

<FORM METHOD=”POST” ENCTYPE=”multipart/form-data” ACTION=”url”>

Este posibil ca serverul să nu fie configurat astfel încât să accept fiecare tip de MIME.

4.3.9 Crearea câmpurilor ascunse

Uneori este utilă crearea așa-numitor câmpuri ascunse. Valorile câmpurilor ascunse sunt trimise la server alături de valorile altor controale; cu toate acestea, utilizatorul nu are posibilitatea de a vizualiza sau manipula valorile câmpurilor ascunse.

Câmpurile ascunse se utilizează frecvent în cadrul unei serii de formulare. De exemplu, datele introduse de utilizator în primul formular din serie pot fi necesare în formularele ulterioare. În loc de a determina utilizatorul să introducă datele în fiecare formular, datele pot fi stocate într-un câmp ascuns, creat și inițializat de scriptul care prelucrează primul formular. Astfel utilizatorul este scutit de o muncă suplimentară și sunt preîntâmpinate eventualele erori, care ar fi putut apărea dacă utilizatorul nu ar fi introdus aceleași date în formulare ulterioare.

Pentru a crea un câmp ascuns, folosiți următoarea sintaxă:

<INPUT TYPE=”HIDDEN” NAME=”txt” VALUE=”txt”>

Numai atributele TYPE și NAME sunt obligatorii; cu toate acestea, controlul este practic inutil în absența atributului VALUE, a cărui valoare este trimisă în mod automat la server în momentul expedierii formularului.

4.3.10 Butoane

Butoanele pot fi de mai multe tipuri: de expediere (SUBMIT), de reinițializare (RESET) ,butoane utilizator și butoane de tip imagine.

Un buton de expediere permite utilizatorului să trimită serverului conținutul unui formular. Fiecare formular HTML trebuie să aibă un buton de expediere. Pentru a crea un buton de expediere, se utilizează următoarea formă elementară:

<INPUT TYPE=”SUBMIT” VALUE=”txt”>

Atributul VALUE specifică textul care trebuie să apară pe suprafața butonului de expediere.

Uneori este folositor ca utilizatorul să poată executa clic pe un buton care să șteargă toate informațiile dintr-un formular (buton de reinițializare). Pentru a crea un buton de reinițializare, se folosește sintaxa:

<INPUT TYPE=”RESET” VALUE=”txt”>

Unicul atribut obligatoriu este TYPE. Atributul opțional VALUE specifică textul care va apărea pe suprafața butonului de reinițializare; dacă atributul este omis, pe buton va scrie „Reset”.

De obicei butonului de tip utilizator i se asociază o acțiune de tip script client. Pentru a crea un buton utilizator se folosește următoarea sintaxa:

<INPUT TYPE=”BUTTON” VALUE=”Apasa aici”>

Mulți designeri WEB nu sunt mulțumiți de aspectul general al butoanelor generate de browsere. Din fericire, ele pot fi înlocuite cu imagini, astfel încât să nu afecteze designul unei pagini. Pentru a crea un buton de tip imagine se folosește următoarea sintaxa:

<INPUT TYPE=”IMAGE” BORDER=”0” SRC=”imagine” WIDTH=”width” HEIGHT=”height” ALT=”text alternative” ALIGN=”aliniere”>

Atributul BORDER specifică grosimea marginii imaginii, SRC specifică calea către imagine, WIDTH și HEIGHT nu sunt obligatorii și arată dimensiunile imaginii, ALT specifică textul care va apare dacă imaginea nu este găsită, iar ALIGN arată alinierea în pagina WEB.

4.3.11 Elemente apărute recent

Următoarele elemente au apărut relativ recent și nu sunt pe deplin implementate, mai ales în browserele mai vechi. Unul dintre elementele noi introduse este tag-ul label. Acesta se folosește pentru a specifica un text înaintea câmpurilor pentru a le face cunoscută semnificația. Sintaxa este:

<LABEL FOR=”element”>Nume:</LABEL>

Atributul FOR specifică numele elementului căruia îi va fi asociat textul din tag-ul label. Un avantaj al acestui element este acela că un element se va activa atunci când se execută clic pe eticheta sa.

Un alt element nou apărut este cel folosit pentru gruparea elementelor în casete. Sintaxa este:

<FIELDSET>

<LEGEND>titlu</LEGEND>

elemente

</FIELDSET>

Aceste elemente nou introduse în limbajul HTML 4.0 vor crea mari probleme celor ce folosesc browsere mai vechi și de aceea nu este recomandată folosirea lor.

Capitolul 5

Prezentarea lucrării „Magazin servicii gazduire web”

5.1 Prima pagină

O pagină atractivă este vitală pentru succesul unui site. Menirea ei este să ofere utilizatorului motivele pentru a continua să vadă mai mult și eventual să fie interesat imediat să cumpere serviciile oferite. Pagina principala a website-ului care ofera servicii de gazduire pagini web(hosting) trebuie sa prezinte vizitatorului o idee despre cum sa navigheze pe site in functie de nevoile lui. Aici poate vedea ca fiecare tip de produs are pagina lui, pagina de contact sau pagina de Reseller, cosul de cumparaturi, functia de log in si butonul care activeaza versiunea in engleza a site-ului. De asemenea este si o casuta de cautare pe prima pagina care ajuta utilizatorul sa isi gaseasca un domeniu disponibil in caz ca asta cauta pe acest site.

Prima pagină este de fapt o combinație de mai multe pagini. Unele elemente sunt prezentate pe toate paginile din acest site, ca de exemplu notița de copyright de la sfârșit, instrucțiunile de conectare la baza de date sau partea în care specificăm titlul și setul de caractere folosit.

Php ne oferă funcția include cu care le putem include în cadrul scriptului și să le refolosim în orice alt script fără a le scrie din nou.

Structura fiecărei pagini din site, indiferent dacă este prima pagină sau cea a prezentarii unui tip de servicii, este asemenatoare: in partea de sus se afla meniul principal (javascript), sub el incepe continutul paginilor, iar in dreapta este un meniu secundar unde te poti loga, schimba textul in engleza si se poate vizualiza cosul de cumparaturi.

page_top

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />

<title>Gazduire pagini web – inregistrare domenii – Net Solution</title>

<meta name='description' content='NET-SOLUTION, gazduire pagini web, gazduire domenii, inregistrare domenii, gazduire email, reseller gazduire.' />

<meta name='Keywords' content='NET-SOLUTION, gazduire pagini web, gazduire domenii, inregistrare domenii, domenii, gazduire email, reseller gazduire.' />

<meta name='language' content='romanian' />

<meta name="rating" content="General" />

<meta name="expires" content="never" />

<meta name="charset" content="ISO-8859-2" />

<meta name="distribution" content="Global" />

<meta name="robots" content="index, follow" />

<meta name="revisit-after" content="7 days" />

<meta name="coverage" content="Nationwide" />

<meta name="country" content="ROMANIA" />

<meta name="creationdate" content="January 2006" />

<meta name="language" content="Romanian" />

<meta name="email" content="[anonimizat]" />

<meta name="author" content="Net Solution (www.net-solution.ro)" />

<meta name="organization-Email" content="[anonimizat]" />

<meta name="publisher" content="Net Solution (www.net-solution.ro)" />

<meta name="copyright" content="Copyright 2008 – Net Solution" />

<meta name="verify-v1" content="j3l9YqCtecpJTasY7neutNMfUS0h0ycQc9gvaAO8mK8=" />

<link rev="made" href="[anonimizat]" />

<link rel="stylesheet" type="text/css" href="general/styles.css" />

<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />

<script type="text/javascript" language="javascript" src="general/AC_OETags.js"></script>

<script type="text/javascript" language="javascript" src="general/scripts.js"></script>

</head>

În page_bottom scriem notița de copyright și închidem toate tagurile deschise.

page_bottom

</table>

<script type="text/javascript">

var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");

document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));

</script>

<script type="text/javascript">

var pageTracker = _gat._getTracker("UA-1279627-7");

pageTracker._initData();

pageTracker._trackPageview();

</script>

</body>

</html>

In meniu sunt afisate toate produsele si serviciile oferite de acest site din punctil de vedere al utilizatorului / cumparatorului: link spre pagina cu produsele de gazduire (gazduire), link spre pagina unde poti cumpara domenii (domenii), link spre pagina unde poti cumpara servicii de email (email), link spre pagina unde poti deveni afiliat si link spre pagina de conatact.

meniu

<td style="width:373px;background:url(images/despre_03.jpg) repeat-y;" valign="top">

<table style="width:373px;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="height:30px; width:373px;"></td>

</tr>

<tr>

<td style="height:22px; width:373px; background:url(images/despre_06.jpg) no-repeat top left;" valign="top" align="right">

<table cellpadding="0" cellspacing="0" border="0" align="center">

<tr>

<td><a href="http://www.net-solution.ro/gazduire-domenii.html" class="normal_link" title="Gazduire domenii">GAZDUIRE</a>&nbsp;</td>

<td><a href="http://www.net-solution.ro/inregistrare-domenii.html" class="normal_link" title="Inregistrare domenii">INREGISTRARE DOMENII</a>&nbsp;</td>

<td><a href="http://www.net-solution.ro/gazduire-email.html" class="normal_link" title="Gazduire email">EMAIL</a>&nbsp;</td>

<td><a href="http://www.net-solution.ro/reseller-gazduire.html" class="normal_link" title="Reseller gazduire">RESELLER</a>&nbsp;</td>

<td><a href="http://www.net-solution.ro/contactati-net-solution.html" class="normal_link" title="Contactati Net-Solution">CONTACT</a>&nbsp;</td>

</tr>

</table>

</td>

</tr>

In final voi crea fișierul index.php care va conține toate fișierele de până acum și conținutul primei pagini. Conținutul acestei pagini va fi dinamic pentru ca va avea elemnte care depind de conținutul bazei de date.

Index.php

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />

<title>Gazduire pagini web – inregistrare domenii – Net Solution</title>

<meta name='description' content='NET-SOLUTION, gazduire pagini web, gazduire domenii, inregistrare domenii, gazduire email, reseller gazduire.' />

<meta name='Keywords' content='NET-SOLUTION, gazduire pagini web, gazduire domenii, inregistrare domenii, domenii, gazduire email, reseller gazduire.' />

<meta name='language' content='romanian' />

<meta name="rating" content="General" />

<meta name="expires" content="never" />

<meta name="charset" content="ISO-8859-2" />

<meta name="distribution" content="Global" />

<meta name="robots" content="index, follow" />

<meta name="revisit-after" content="7 days" />

<meta name="coverage" content="Nationwide" />

<meta name="country" content="ROMANIA" />

<meta name="creationdate" content="January 2006" />

<meta name="language" content="Romanian" />

<meta name="email" content="[anonimizat]" />

<meta name="author" content="Net Solution (www.net-solution.ro)" />

<meta name="organization-Email" content="[anonimizat]" />

<meta name="publisher" content="Net Solution (www.net-solution.ro)" />

<meta name="copyright" content="Copyright 2008 – Net Solution" />

<meta name="verify-v1" content="j3l9YqCtecpJTasY7neutNMfUS0h0ycQc9gvaAO8mK8=" />

<link rev="made" href="[anonimizat]" />

<link rel="stylesheet" type="text/css" href="general/styles.css" />

<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />

<script type="text/javascript" language="javascript" src="general/AC_OETags.js"></script>

<script type="text/javascript" language="javascript" src="general/scripts.js"></script>

</head>

<body>

<table style="width:100%; height:100%; background:url(images/orizontala.jpg) top repeat-x; border:0px;" cellpadding="0" cellspacing="0">

<tr>

<td valign="top" class="first_tabel">

<!– CENTRAL TABEL –>

<table cellpadding="0" cellspacing="0" border="0" align="left" style="height:100%;">

<tr>

<!– BORCANU –>

<td valign="top" align="left" style="width:269px;"><a href="http://www.net-solution.ro" title="Gazduire domenii, inregistrare domenii, gazduire email, reseller gazduire"><img src="images/despre_02.jpg" border="0" alt="Gazduire domenii, inregistrare domenii, gazduire email, reseller gazduire" /></a></td>

<!– // BORCANU –>

<!– CENTRU –>

<td style="width:373px;background:url(images/despre_03.jpg) repeat-y;" valign="top">

<table style="width:373px;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="height:30px; width:373px;"></td>

</tr>

<tr>

<td style="height:22px; width:373px; background:url(images/despre_06.jpg) no-repeat top left;" valign="top" align="right">

<table cellpadding="0" cellspacing="0" border="0" align="center">

<tr>

<td><a href="http://www.net-solution.ro/gazduire-domenii.html" class="normal_link" title="Gazduire domenii">GAZDUIRE</a>&nbsp;</td>

<td><a href="http://www.net-solution.ro/inregistrare-domenii.html" class="normal_link" title="Inregistrare domenii">INREGISTRARE DOMENII</a>&nbsp;</td>

<td><a href="http://www.net-solution.ro/gazduire-email.html" class="normal_link" title="Gazduire email">EMAIL</a>&nbsp;</td>

<td><a href="http://www.net-solution.ro/reseller-gazduire.html" class="normal_link" title="Reseller gazduire">RESELLER</a>&nbsp;</td>

<td><a href="http://www.net-solution.ro/contactati-net-solution.html" class="normal_link" title="Contactati Net-Solution">CONTACT</a>&nbsp;</td>

</tr>

</table>

</td>

</tr>

<tr>

<td>

<script type="text/javascript">

AC_FL_RunContent(

"src", "swf/ro_main_menu",

"width", "373",

"height", "80",

"align", "middle",

"id", "main_menu",

"quality", "high",

"bgcolor", "#FFFFFF",

"name", "main_menu",

"allowScriptAccess","sameDomain",

"type", "application/x-shockwave-flash",

'codebase', 'http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab',

"pluginspage", "http://www.adobe.com/go/getflashplayer"

);

</script>

</td>

</tr>

<tr>

<td style="height:49px; width:373px; background:url(images/despre_13.jpg) no-repeat left top;" align="center">&nbsp;</td>

</tr>

<tr>

<td style="padding:5px;" valign="top">

<!– CONTENT –>

<table style="width:100%" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="height:100px; width:100%; background:#EBEEF3;" align="center" valign="middle">

<script type="text/javascript">

AC_FL_RunContent(

"src", "swf/index_ro",

"width", "360",

"height", "100",

"align", "middle",

"id", "index_swf",

"quality", "high",

"bgcolor", "#EDEEF1",

"name", "index_swf",

"allowScriptAccess","sameDomain",

"type", "application/x-shockwave-flash",

'codebase', 'http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab',

"pluginspage", "http://www.adobe.com/go/getflashplayer"

);

</script>

</td>

</tr>

<tr>

<td style="height:10px;"></td>

</tr>

<tr>

<td class="normal_text" style="background:#EDEEF1; padding:10px;" align="justify"><a href="http://www.net-solution.ro/" class='normal_link' title="gazduire domenii, inregistrare domenii, gazduire, domenii, gazduire pagini web, reseller gazduire, gazduire email">NET-SOLUTION</a> ofera gazduire pagini web, gazduire domenii, inregistrare domenii, gazduire email si reseller gazduire. Planurile noastre de gazduire fac ca <a href="http://www.net-solution.ro/" class='normal_link' title="gazduire domenii, inregistrare domenii, gazduire, domenii, gazduire pagini web, reseller gazduire, gazduire email">NET-SOLUTION</a> sa fie cel mai bun loc unde sa iti gazduiesti pagina web a afacerii tale sau pagina ta web personala. Echipa noastra de suport va va ajuta chiar daca sunteti incepator la gazduirea pagini web, gazduire domenii, inregistrare domenii, gazduire email si reseller gazduire. Noi, <a href="http://www.net-solution.ro/" class='normal_link' title="gazduire domenii, inregistrare domenii, gazduire, domenii, gazduire pagini web, reseller gazduire, gazduire email">NET-SOLUTION</a> va oferim solutia completa de la inregistrare domenii, gazduire pagini web pana la implementarea si promovarea lor.</td>

</tr>

<tr>

<td>

<form action="php/disponibility.php" method="post" name="cauta_domeniu">

<input type="hidden" name="mode" value="domain" />

<input type="hidden" name="link" value="czoxMToiL2luZGV4LnBocD8iOw==" />

<table cellpadding="0" cellspacing="0" border="0">

<tr>

<td class="normal_text" align="left" style="padding:10px;">Scrieti numele domeniului pentru care doriti sa aflati disponibilitatea</td>

</tr>

<tr>

<td style="padding-bottom:10px;" align="center">

</td>

</tr>

<tr>

<td>

<table align="center">

<tr>

<td align="left" valign="middle" style="padding-left:10px;"><input type="text" name="domeniu" class="input_text" style="color: #7F8C9D;" /></td>

<td> . </td>

<td><select name="extensie" class="combos" style="text-align:left;width:75px;">

<option value="ro">ro</option>

<option value="com">com</option>

<option value="net">net</option>

<option value="org">org</option>

<option value="biz">biz</option>

<option value="eu">eu</option>

<option value="info">info</option>

<option value="de">de</option>

<option value="name">name</option>

<option value="us">us</option>

<option value="ws">ws</option>

<option value="org.uk">org.uk</option>

<option value="com.tw">com.tw</option>

<option value="cc">cc</option>

<option value="ru">ru</option>

<option value="co.uk">co.uk</option>

<option value="ws">ws</option>

<option value="cn">cn</option>

<option value="ac">ac</option>

<option value="io">io</option>

<option value="sh">sh</option>

<option value="tv">tv</option>

<option value="nu">nu</option>

<option value="tm">tm</option>

<option value="bz">bz</option>

<option value="jp">jp</option>

<option value="ca">ca</option>

<option value="tc">tc</option>

<option value="vg">vg</option>

<option value="ms">ms</option>

<option value="gs">gs</option>

<option value="in">in</option>

<option value="com.ro">com.ro</option>

<option value="org.ro">org.ro</option>

<option value="tm.ro">tm.ro</option>

<option value="nt.ro">nt.ro</option>

<option value="nom.ro">nom.ro</option>

<option value="info.ro">info.ro</option>

<option value="rec.ro">rec.ro</option>

<option value="arts.ro">arts.ro</option>

<option value="firm.ro">firm.ro</option>

<option value="store.ro">store.ro</option>

<option value="www.ro">www.ro</option>

</select>

</td>

<td valign="middle" align="left" style="width:100%; padding-left:10px;"><a href="javascript:document.forms['cauta_domeniu'].submit();"><img src="images/despre_25.jpg" alt="cauta"/></a></td>

</tr>

</table>

</td>

</tr>

<tr>

<td class="normal_text" style="padding:10px 10px 0 10px;">Domeniul tau este o adresa web folosita pentru a putea gasi pagina ta. Introdu adresa dorita in campul de mai sus.</td>

</tr>

</table>

</form>

</td>

</tr>

</table>

<!– // CONTENT –>

</td>

</tr>

<tr>

<td class="normal_text" align="center">

<p>……………………………………………………………………………..</p>

<p><!–<a href="termeni_si_conditii.html" class="normal_link">–>

<a href='termeni-si-conditii.html' class='normal_link'>termeni si conditii</a> |

<a href='confidentialitate.html' class='normal_link'>confidentialitate</a> |

<a href='linkati-ne.html' class='normal_link'>linkati-ne</a> |

<a href='linkuri.html' class='normal_link'>link-uri asemanatoare</a></p>

<p>Copyright &copy; <a href="http://www.net-solution.ro" target="_self" class="normal_link">NET-SOLUTION</a> 2002-2008 </p>

</td>

</tr>

<tr>

<td style="height:20px;"></td>

</tr>

</table>

</td>

<!– // CENTRU –>

<!– DREAPTA –>

<td style="width:108px;" valign="top" align="left">

<table cellpadding="0" cellspacing="0" border="0">

<tr><td style="height:30px; background:url(images/despre_04.jpg) no-repeat left top;"></td></tr>

<tr><td style="height:22px; background:url(images/despre_07.jpg) no-repeat left top;"></td></tr>

<tr><td style="height:80px;"><a href="http://www.net-solution.ro" title="Gazduire domenii, inregistrare domenii, gazduire email, reseller gazduire"><img src="images/despre_11.jpg" border="0" alt="Gazduire domenii, inregistrare domenii, gazduire email, reseller gazduire" /></a></td></tr>

<tr>

<td style="height:47px; background:url(images/despre_14.jpg) no-repeat left top; padding-top:35px;" align="center" valign="middle">

<br /><br /><br /><div style='width:106px;background:#cad1dc; height:16; vertical-align:middle'><a href="javascript:change_currency('RON');" class="normal_link_bold">RON</a> <a href="javascript:change_currency('EUR');" class="normal_link">EUR</a> <a href="javascript:change_currency('USD');" class="normal_link">USD</a> </div> </td>

</tr>

<tr>

<td valign="top" align="center" style="padding-top:15px;">

<table border="0" cellpadding="0" cellspacing="2">

<tr>

<td align="center" bgcolor="#cad1dc"><a href="index.php?page=cart" class="normal_link">COSUL MEU</a></td>

</tr>

<tr>

<td align="center" bgcolor="#cad1dc"><a href="https://s1.net-solution.ro:81/" class="normal_link">LOGIN CLIENTI</a></td>

</tr>

<tr>

<td align="center" bgcolor="#cad1dc"><a href="javascript:change_language('en');" class="normal_link">ENGLISH</a></td>

</tr>

<tr>

<td align="center" style=" width:108;height:100px;background:url(images/1.jpg) no-repeat left top;">&nbsp;</td>

</tr>

</table>

</td>

</tr>

<tr><td style="height:98px;" valign="top"></td></tr>

</table>

</td>

<!– // DREAPTA –>

</tr>

</table>

<!– // CENTRAL TABEL –>

</td>

</tr>

</table>

<script type="text/javascript">

var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");

document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));

</script>

<script type="text/javascript">

var pageTracker = _gat._getTracker("UA-1279627-7");

pageTracker._initData();

pageTracker._trackPageview();

</script>

</body>

</html>

NOTA: Meniul nu se vede pentru ca imaginea este un printscreen, iar meniul este facut in Javascript.

5.2 Gazduire-domenii

A doua pagină pe care o voi descrie este cea care se ocupă de serviciile de gazduire pentru domenii web. Structura site-ului este la fel ca si la celelalte pagini (inclusiv prima pagina) si sunt prezentate caeva pachete de servicii de gazduire facute sa fie pa masura mai multor tipuri de utilizatori / cumparatori.

Gazduire-domenii.php

<?

$sql=mysql_query("SELECT * FROM `gazduire`");

$prices=array();

while($row=mysql_fetch_array($sql, MYSQL_ASSOC)){

$prices[$row['plan']]=$row['luna'];

}

//showMe(MONEDA);

?>

<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="padding-bottom:10px;">

<h1 style="font-size:18px; font-weight:normal; margin:0px;"><? echo get_txt('H1_GAZDUIRE'); ?></h1> </td>

</tr>

<tr>

<td style="normal_text "><? include "includes/".LANG."_gazduire.htm";?></td>

</tr>

<tr>

<td style="padding-bottom:10px;">

<?

if($_GET['err']){

$ERR=unserialize(base64_decode($_GET['err']));

show_err($ERR);

}

?> </td>

</tr>

<tr>

<td>

<form action="php/set_domain_plan.php" method="post">

<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="height:25px; background:#485C74; width:50%;" class="normal_text_invert">GAZDUIRE DOMENII STARTER</td>

<td style="height:25px; background:#485C74; width:50%;" class="normal_text_invert">GAZDUIRE DOMENII PERSONAL</td>

</tr>

<tr>

<td style="width:50%;" class="verde"></td>

<td style="width:50%;" class="verde"></td>

</tr>

<tr>

<td style="padding:10px 10px 0 0;" valign="top">

<? include "includes/".LANG."_gazduire_starter.htm"; ?> </td>

<td style="padding:10px 10px 0 0;" valign="top">

<? include "includes/".LANG."_gazduire_personal.htm"; ?> </td>

</tr>

<tr>

<td class="albastru_deschis">

<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="width:25px;"><input type="radio" name="host_plan" value="STARTER:MONTH" /></td>

<td class="normal_text" align="left"><?=make_price($prices['starter']);?> / <?=$TXT['MONTH'];?></td>

</tr>

<tr>

<td style="width:25px;"><input type="radio" name="host_plan" value="STARTER:YEAR" /></td>

<td class="normal_text" align="left"><?=make_price(cost2year($prices['starter']));?> / <?=$TXT['YEAR'];?></td>

</tr>

</table>

<td class="albastru_deschis">

<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="width:25px;"><input type="radio" name="host_plan" value="PERSONAL:MONTH" /></td>

<td class="normal_text" align="left"><?=make_price($prices['personal']);?> / <?=$TXT['MONTH'];?></td>

</tr>

<tr>

<td style="width:25px;"><input type="radio" name="host_plan" value="PERSONAL:YEAR" /></td>

<td class="normal_text" align="left"> <?=make_price(cost2year($prices['personal']));?> / <?=$TXT['YEAR'];?></td>

</tr>

</table> </td>

</tr>

<tr>

<td style="padding:10px;"><a href="javascript:document.forms[0].submit();"><img src="images/despre_25.jpg" /></a></td>

<td style="padding:10px;"><a href="javascript:document.forms[0].submit();"><img src="images/despre_25.jpg" /></a></td>

</tr>

<tr>

<td style="height:10px;"></td>

</tr>

<!– row 2 –>

<tr>

<td style="height:25px; background:#485C74; width:50%;" class="normal_text_invert">GAZDUIRE DOMENII BUSINESS</td>

<td style="height:25px; background:#485C74; width:50%;" class="normal_text_invert">GAZDUIRE DOMENII ADVANCED</td>

</tr>

<tr>

<td style="width:50%;" class="verde"></td>

<td style="width:50%;" class="verde"></td>

</tr>

<tr>

<td style="padding:10px 10px 2px 0;" valign="top">

<? include "includes/".LANG."_gazduire_business.htm"; ?> </td>

<td style="padding:10px 10px 2px 0;" valign="top">

<? include "includes/".LANG."_gazduire_advanced.htm"; ?> </td>

</tr>

<tr>

<td class="albastru_deschis">

<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="width:25px;"><input type="radio" name="host_plan" value="BUSINESS:MONTH" /></td>

<td class="normal_text" align="left"><?=make_price($prices['business']);?> / <?=$TXT['MONTH'];?></td>

</tr>

<tr>

<td style="width:25px;"><input type="radio" name="host_plan" value="BUSINESS:YEAR" /></td>

<td class="normal_text" align="left"><?=make_price(cost2year($prices['business']));?> / <?=$TXT['YEAR'];?></td>

</tr>

</table>

<td class="albastru_deschis">

<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="width:25px;"><input type="radio" name="host_plan" value="ADVANCED:MONTH" /></td>

<td class="normal_text" align="left"><?=make_price($prices['advanced']);?> / <?=$TXT['MONTH'];?></td>

</tr>

<tr>

<td style="width:25px;"><input type="radio" name="host_plan" value="ADVANCED:YEAR" /></td>

<td class="normal_text" align="left"><?=make_price(cost2year($prices['advanced']));?> / <?=$TXT['YEAR'];?></td>

</tr>

</table> </td>

</tr>

<tr>

<td style="padding:10px 10px 0 10px;"><a href="javascript:document.forms[0].submit();"><img src="images/despre_25.jpg" /></a></td>

<td style="padding:10px 10px 0 10px;"><a href="javascript:document.forms[0].submit();"><img src="images/despre_25.jpg" /></a></td>

</tr>

</table>

</form> </td>

</tr>

<tr>

<td><? include "includes/".LANG."_gazduire_info.htm"; ?></td>

</tr>

</table>

5.3 Inregistrare-domenii

A 3-a pagină pe care o voi descrie este cea care se ocupă de serviciile de inregistrare domenii web. Structura site-ului este la fel ca si la celelalte pagini (inclusiv prima pagina) si sunt prezentate optiunile de inregistrare domenii cu casuta de cautare pentru domeniile disponibile pentru vanzare.

inregistrare-domenii.php

<?

include "php/hosting_check.php";

?>

<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="padding-bottom:10px;">

<h1 style="font-size:18px; font-weight:normal; margin:0px;"><? echo get_txt('H1_DOMENII'); ?></h1>

</td>

<tr>

<td class="normal_text"><? include "includes/".LANG."_domenii.htm";?></td>

</tr>

<tr>

<td style="height:10px;"></td>

</tr>

<tr>

<td style="padding-bottom:10px;">

<?

if($_GET['err']){

$ERR=unserialize(base64_decode($_GET['err']));

show_err($TXT['EMAIL_'.$ERR[0]]);

}else{

echo get_txt('DOMAIN_INFO');

}

?>

</td>

</tr>

<tr>

<td align="left">

<form action="php/disponibility.php" method="post" id="search_host" name="search_host">

<input type="hidden" name="mode" value="domeniu" />

<input type="hidden" name="link" value="<?=$Q;?>" />

<table cellpadding="0" cellspacing="0" border="0">

<tr>

<td>

<table align="left">

<tr>

<td align="left" valign="middle" style="padding-left:10px;"><input type="text" name="domeniu" class="input_text" style="color: #7F8C9D;" /></td>

<td> . </td>

<td><?=get_domains_list();?></td>

<td valign="middle" align="left" style="width:100%; padding-left:10px;"><a href="javascript:document.forms['search_host'].submit();"><img src="images/despre_25.jpg" /></a></td>

</tr>

</table>

</td>

</tr>

</table>

</form>

</td>

</tr>

<tr>

<td>

<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td rowspan="2" class="dom" style="width:35px;">TLD</td>

<td colspan="1" rowspan="2" class="dom"><?=get_txt("out_host");?></td>

<td colspan="4" class="dom">PLAN</td>

</tr>

<tr>

<td class="dom">STARTER</td>

<td class="dom">PERSONAL</td>

<td class="dom">BUSINESS</td>

<td class="dom">ADVANCED</td>

</tr>

<?php

function insert_row($row, $color){

global $colors;

$fara=make_price($row['fara_gazduire']);

$starter=make_price($row['starter']);

$personal=make_price($row['personal']);

$business=make_price($row['business']);

$advanced=make_price($row['advanced']);

echo " <tr style='background:".$color."'>

<td class='dom_rez'>".$row['domeniu']."</td>

<td class='dom_rez'>".$fara."</td>

<td class='dom_rez'>".$starter."</td>

<td class='dom_rez'>".$personal."</td>

<td class='dom_rez'>".$business."</td>

<td class='dom_rez'>".$advanced."</td>

</tr>";

if($colors_id==0) $colors_id=1;

else $colors_id=0;

}

if($_GET['list']=="all"){

$query="SELECT * FROM `domenii` ORDER BY `id`";

}else{

$query="SELECT * FROM `domenii` WHERE (`domeniu`='ro' || `domeniu`='com' || `domeniu`='org' || `domeniu`='net' || `domeniu`='biz' || `domeniu`='eu') ORDER BY `id`";

}

//$sql=mysql_query("SELECT * FROM `domenii`");

$sql=mysql_query($query);

while($row=mysql_fetch_array($sql, MYSQL_ASSOC)){

insert_row($row, $color);

$color=$colors[$colors_id];

if($colors_id==0) $colors_id=1;

else $colors_id=0;

}

?>

</table>

</td>

</tr>

<?

if(!$_GET['list']){

?>

<tr>

<td align="center" style="padding-top:15px;"><a href="<?=$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'];?>&amp;list=all" class="normal_link"><?=get_txt('all');?></a></td>

</tr>

<?

}else{

?>

<tr>

<td align="center" style="padding-top:15px;"><a href="inregistrare-domenii.html" class="normal_link"><?=get_txt('DOMAIN_5');?></a></td>

</tr>

<?

}

?>

</table>

5.4 Gazduire email

Urmatoarea pagină pe care o voi descrie este cea care se ocupă de serviciile de gazduire adrese de email. Structura site-ului este la fel ca si la celelalte pagini (inclusiv prima pagina) si sunt prezentate optiunile de gazduire adrese de email.

gazduire-email.php

<?

$sql=mysql_query("SELECT * FROM `email`");

$prices=array();

while($row=mysql_fetch_array($sql, MYSQL_ASSOC)){

$prices[$row['plan']]=$row['luna'];

}

//showMe($prices);

?>

<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="padding-bottom:10px;">

<h1 style="font-size:18px; font-weight:normal; margin:0px;"><? echo get_txt('H1_EMAIL'); ?></h1>

</td>

</tr>

<tr>

<td class="normal_text"><? include "includes/".LANG."_email_text.htm";?></td>

</tr>

<tr>

<td style="padding-bottom:10px;">

<?

if($_GET['err']){

$ERR=unserialize(base64_decode($_GET['err']));

show_err($ERR);

}else{

//echo get_txt('EMAIL_INFO');

}

?>

</td>

</tr>

<tr>

<td>

<form action="php/set_email_plan.php" method="post" id="buy">

<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="height:25px; background:#485C74; width:50%;" class="normal_text_invert">PERSONAL PLAN</td>

<td style="height:25px; background:#485C74; width:50%;" class="normal_text_invert">STANDARD PLAN</td>

</tr>

<tr>

<td style="width:50%;" class="verde">3 e-mails</td>

<td style="width:50%;" class="verde">10 e-mails</td>

</tr>

<tr>

<td style="padding:10px 10px 10px 0;" valign="top">

<? include "includes/".LANG."_email_personal.htm";?>

</td>

<td style="padding:10px 10px 10px 0;" valign="top">

<? include "includes/".LANG."_email_standard.htm";?>

</td>

</tr>

<tr>

<td class="albastru_deschis">

<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="width:25px;"><input type="radio" name="email_plan" value="personal:month" /></td>

<td class="normal_text" align="left"><?=make_price($prices['personal']);?> / <?=$TXT['MONTH'];?></td>

</tr>

<tr>

<td style="width:25px;"><input type="radio" name="email_plan" value="personal:year" /></td>

<td class="normal_text" align="left"><?=make_price(cost2year($prices['personal'])); ?> / <?=$TXT['YEAR'];?></td>

</tr>

</table>

<td class="albastru_deschis">

<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">

<tr>

<td style="width:25px;"><input type="radio" name="email_plan" value="standard:month" /></td>

<td class="normal_text" align="left"><?=make_price($prices['standard']); ?> / <?=$TXT['MONTH'];?></td>

</tr>

<tr>

<td style="width:25px;"><input type="radio" name="email_plan" value="standard:year" /></td>

<td class="normal_text" align="left"><?=make_price(cost2year($prices['standard'])); ?> / <?=$TXT['YEAR'];?></td>

</tr>

</table>

</td>

</tr>

<tr>

<td style="padding:10px;"><a href="javascript:document.forms['buy'].submit();"><img src="images/despre_25.jpg" /></a></td>

<td style="padding:10px;"><a href="javascript:document.forms['buy'].submit();"><img src="images/despre_25.jpg" /></a></td>

</tr>

<!– row 2 –>

</table>

</form>

</td>

</tr>

</table>

5.5 Coșul de cumparaturi

Pe langa prezentarea produselor de gazduire pagini web, enirea acestui site este si aceea de a oferi posibilitatea utilizatorului să cumpere. În acest scop voi face pagina coș.php, aici vizitatorul poate introduce numărul de exemplare pe care dorește să le cumpere, poate modifica numărul de exemplare dintr-o selecție anterioară sau poate să scoată anumite cărți din coșul de cumpărături.

Sesiunile sunt modul în care putem păstra informații în memorie. Astfel, cumpărătorul nostru poate adăuga o carte în coș și apoi să continue să viziteze site-ul pentru ca mai târziu să poată reveni și comanda produsele. Sesiunile expiră după 3 ore. Într-o sesiune datele pot fi salvate într-o variabilă numită $_SESSION. Înainte de a folosi această variabilă trebuie să apelăm funcția session_start().

cart.php

<?

$db->Query("SELECT * FROM `cos` WHERE (`session`='".SESSION."' AND `type`='domain')");

$d=$db->NumRows();

$db->Query("SELECT * FROM `cos` WHERE (`session`='".SESSION."' AND `type`='hosting')");

$h=$db->NumRows();

$db->Query("SELECT * FROM `cos` WHERE (`session`='".SESSION."' AND `type`='email')");

$e=$db->NumRows();

//showMe($d." ".$h." ".$e);

$crt=1;

$total=0;

?>

<table style="width:100%;" cellpadding="0" cellspacing="0">

<tr>

<td style="height:25px;" align="center"><strong><?=get_txt('YOUR_CART');?></strong></td>

</tr>

<?

if($d){

?>

<tr>

<td class="verde"><?=strtoupper(get_txt('DOMAINS'));?></td>

</tr>

<tr>

<td>

<table cellpadding="0" cellspacing="0" style="width:100%;">

<tr>

<td class="view_cart" style="width:10%;">Nr.</td>

<td class="view_cart"><?=strtoupper(get_txt('DOMAIN'));?></td>

<td class="view_cart" style="width:25%;"><?=strtoupper(get_txt('PRICE'));?></td>

<td class="view_cart" style="width:5%;">&nbsp;</td>

</tr>

<?

$db->Query("SELECT * FROM `cos` WHERE (`session`='".SESSION."' AND `type`='domain')");

while($row=$db->Fetch()){

print "<tr style='background:".colorate($crt)."'>\n";

print "<td align='center' style='height:25px;' class='rezultat_text'>".$crt."</td>\n";

print "<td align='left' class='rezultat_text'>".$row['domeniu']."</td>\n";

print "<td align='center' class='rezultat_text'>".make_price($row['pret'])."</td>\n";

print "<td align='center' valign='middle'><a href='php/delete_from_cart.php?pid=".$row['id']."'><img src='images/delete.gif' alt='' /></a></td>\n";

print "</tr>\n";

$crt++;

$total+=$row['pret'];

}

?>

</table>

</td>

</tr>

<tr>

<td style="height:10px;"></td>

</tr>

<?

}

if($h){

?>

<tr>

<td class="verde">GAZDUIRE</td>

</tr>

<tr>

<td>

<table cellpadding="0" cellspacing="0" style="width:100%;">

<tr>

<td class="view_cart" style="width:10%;">Nr.</td>

<td class="view_cart"><?=strtoupper(get_txt('DOMAIN'));?></td>

<td class="view_cart" style="width:20%">PLAN</td>

<td class="view_cart" style="width:25%;"><?=strtoupper(get_txt('PRICE'));?></td>

<td class="view_cart" style="width:5%;">&nbsp;</td>

</tr>

<?

$db->Query("SELECT * FROM `cos` WHERE (`session`='".SESSION."' AND `type`='hosting')");

while($row=$db->Fetch()){

print "<tr style='background:".colorate($crt)."'>\n";

print "<td align='center' style='height:25px;' class='rezultat_text'>".$crt."</td>\n";

print "<td align='left' class='rezultat_text'>".$row['domeniu']."</td>\n";

print "<td align='center' class='rezultat_text'>".$row['plan']."</td>\n";

print "<td align='center' class='rezultat_text'>".make_price($row['pret'])."</td>\n";

print "<td align='center' valign='middle'><a href='php/delete_from_cart.php?pid=".$row['id']."'><img src='images/delete.gif' alt='' /></a></td>\n";

print "</tr>\n";

$crt++;

$total+=$row['pret'];

}

?>

</table>

</td>

</tr>

<tr>

<td style="height:10px;"></td>

</tr>

<?

}

if($e){

?>

<tr>

<td class="verde">E-MAIL</td>

</tr>

<tr>

<td>

<table cellpadding="0" cellspacing="0" style="width:100%;">

<tr>

<td class="view_cart" style="width:10%;">Nr.</td>

<td class="view_cart"><?=strtoupper(get_txt('DOMAIN'));?></td>

<td class="view_cart" style="width:20%">PLAN</td>

<td class="view_cart" style="width:25%;"><?=strtoupper(get_txt('PRICE'));?></td>

<td class="view_cart" style="width:5%;">&nbsp;</td>

</tr>

<?

$db->Query("SELECT * FROM `cos` WHERE (`session`='".SESSION."' AND `type`='email')");

while($row=$db->Fetch()){

print "<tr style='background:".colorate($crt)."'>\n";

print "<td align='center' style='height:25px;' class='rezultat_text'>".$crt."</td>\n";

print "<td align='left' class='rezultat_text'>".$row['domeniu']."</td>\n";

print "<td align='center' class='rezultat_text'>".$row['plan']."</td>\n";

print "<td align='center' class='rezultat_text'>".make_price($row['pret'])."</td>\n";

print "<td align='center' valign='middle'><a href='php/delete_from_cart.php?pid=".$row['id']."'><img src='images/delete.gif' alt='' /></a></td>\n";

print "</tr>\n";

$crt++;

$total+=$row['pret'];

}

?>

</table>

</td>

</tr>

<tr>

<td style="height:10px;"></td>

</tr>

<?

}

?>

<tr>

<td class="verde" align="right" style="font-size:11px;"><strong>Total: <?=make_price($total);?></strong></td>

</tr>

<tr>

<td style="padding:10px" align="right">

<table cellpadding="0" cellspacing="0">

<tr>

<td style="padding-right:10px;"><?=strtoupper(get_txt('SEND_CART'));?> </td>

<td><a href="php/ver_login.php"><img src="images/despre_25.jpg" alt="" /></a></td>

</tr>

</table>

</td>

</tr>

</table>

Capitolul 6

Securitatea

Așa cum am spus și în prezentarea lucrării, cel mai important lucru este sa asiguram zona de administrare pentru a nu permite accesul nedorit. Acest lucru îl vom face cu ajutorul mai multor metode:

-protejarea prin nume de utilizator și parolă.

-protecție care să nu permită mai mult de 3 încercări consecutive eșuate de înregistrare cu același nume de utilizator

-criptarea parolei cu algoritmul MD5, algoritm ireversibil.

-la fiecare accesare a unei pagini verificam daca utilizatorul este înregistrat și are acces la pagina respectivă.

-evitarea includerii vizibile a fisierelor pentru a le include în cadrul unei pagini de forma http://site.ro/fi;ier.php?file=nume.html pentru ca un posibil atacator să nu aibă acces la acest tip de informație.

După cum am precizat pagina de început index.php din secțiunea de administrare nu conține decât un simplu formular.

Pentru ca în urmatorul fișier să poată fi confruntate datele din formular cu cele din baza de date, trebuie întâi să avem informațiile stocate în baza de date, pentru aceasta facem un tabel admin în baza de date a site-ului:

CREATE TABLE admin

{

admin_nume NOT NULL,

admin_parola NOT NULL

};

În acest tabel vom salva numele și parola accesul la secțiunea de administrare. Dar, cum salvarea parolei nu este o idee foarte buna o voi introduce criptată:

INSERT INTO admin VALUES (”administrator”, md5(”parola”));

Criptarea MD5 este ireversibilă și astfel nimeni nu o va putea afla chiar dacă are acces la baza de date.

La confruntare datelor trebuie sa initializăm o variabilă cu valoarea criptată a textului trimis ca parolă și apoi să facem interogarea SQL:

$parola_criptata=md5($_POST[`parola`]);

$sql=”SELECT * FROM admin

WHERE admin_nume=’ ”.$_POST[`nume`].”`

AND admin_parola=`”.$parola_criptata.”`”;

Dacă această interogare este executată cu succes va trebui să returneze un singur rând din tabelul admin. Verificarea faptului ca se returnează un rezultat poate fi suficientă dar voi extinde protecția și voi acorda accesul doar dacă rezultatul returnat are un singur rând, dacă numarul de rânduri este diferit de 1 voi opri execuția scriptului.

Voi folosi variabilele de sesiune pentru a păstra în memorie câteva informații despre autentificare, pentru a le reverifica mai târziu la accesarea altor pagini din secțiunea de administrare.

Voi salva id_ul sesiunii într-o variabilă. Toate sesiunile au un id unic, un string asemănător cu o criptare md5.

$_SESSION[`key_admin`]=session_id();

Cu ajutorul scriptului autorizare.php voi împiedica accesul neautorizat prin tastarea directă a adresei unei pagini din scțiunea de administrare, acest script verifică datele sesiunii înainte de încărcarea oricărei pagini.

Pornim sesiunea pentru a putea folosi datele din aceasta, ne conectăm la baza de date, verificăm dacă numele și parola salvate în variabila de sesiune corespund cu cele din baza de date, apoi verificăm dacă numărul unic de identificare al sesiunii este acelasi cu cel al sesiunii.

If($_SESSION[`key_admin`]!=session_id())

{

Print `Acces neautorizat`;

Exit;

}

Vom folosi autorizare.php la începutul fiecărei pagini, și înafară de rolul de securizare va avea și rolul de a inițializa sesiunea și de a se conecta la baza de date, astfel facem trei lucruri în acest script. După includerea acestui script la începutul paginilor dacă vom încerca să tastăm direct calea către acea pagină vom constata că primim mesajul „Acces Neautorizat!”.

Uneori includerea unui fișier care să se ocupe cu autorizarea nu este o soluție viabilă. De exemplu, putem avea următorul exemplu în care o pagină a secțiunii de administrare (test.php) include alte două pagini (meniu.php și main.php). Atunci ar trebui să includem fișierul autorizare în fiecare din ele, dar atunci am primi un mesaj de eroare pentru că sesiunea se reinițializează de 3 ori. Atunci putem crea o funcție creată de noi care să facă autorizarea. Această funcție o putem apoi apela oricând avem nevoie de ea.

Iată și cele două exemple, prima este structura siteulu ce folosește funcția de autorizare iar a doua figură foloseste fișierul autorizare.php.

Securitatea depinde și de multe din setările pe care le avem în browser și în PHP.

Variabilele globale trebuie să fie puse pe off pentru că acestea deși înlesnesc accesul la datele trimise prin fomulare pot prezenta un risc major de securitate, de aceea php.ini este distribuit cu globals=off în ultimele versiuni.

Trebuie evitată includerea vizibilă a fișierelor în forma http://site.ro/fisier.php?file=numefisier.html pentru a include fișiere în cadrul unei pagini. Cu puțină neatenție un atacator poate accesa informații sensibile din cadrul sistemului.PHP poate include fișiere de pe alte servere decât cel pe care rulează dacă setarea URL fopen wrapers este activată în php.ini, această setare trebuie să fie pe off pentru a nu permite includerea fișierelor din altă parte.

Trebuie să limităm numărul de încercări nereușite de logare pentru a descuraja utilizatorii rău intenționați să spargă parola și să aibă acces la sistem. Acest lucru poate fi făcut folosind sesiunile, putem seta o variabilă $_SESSION[‘login_count’] care să țină minte numărul încercărilor de logare pentru un nume de utilizator.

Trebuie de asemenea evitată acordarea extensiilor .inc .txt. sau .html fișierelor de pe site astfel ele vor fi trimise către site ca plain text pe când un fișier cu extensia .php va fi rulat și nu afișat.

Cum spuneam, acestea sunt doar câteva din metodele care pot fi folosite pentru a face aplicații sigure. Siguranță absolută nu există însă prevenirea poate fi salvatoare.

Concluzii

PHP este un limbaj de programare destinat în primul rând Internetului, aducând dinamică unei pagini de web. Este unul din cele mai importante limbaje de programare web open-source și server-side. Numele PHP provine din limba engleză și este un acronim recursiv Php : Hypertext Preprocessor. Exemple faimoase de utilizare a acestui limbaj sunt PhpBB, PhpNuke(CMS), chiar și MediaWiki, software-ul din spatele Wikipedia. Folosirea PHP poate fi văzută ca o alternativă gratuită la utilizarea unor limbaje comerciale cum sunt ASP de la Microsoft, ColdFusion de la Macromedia, sau chiar JSP de la Sun Microsystems, chiar dacă nu se ridică deasupra acestora.

PHP este simplu de utilizat, fiind un limbaj de programare structurat, ca și C-ul,Perl-ul sau începând de la versiunea 5 chiar Java, sintaxa limbajului fiind o combinație a celor trei. Datorită modularității sale, poate fi folosit și pentru a dezvolta aplicații de sine-stătătorare, spre exemplu îm combinație cu PHP -GTK, sau poate fi folosit ca Perl sau Python în linia de comandă. Probabil una din cele mai importante facilități ale limbajului este conlucrarea cu majoritatea bazelor de date relaționale, de la MySQL și până la Oracle, trecând prin MS Sql Server,PostgreSQL, sau DB2. PHP poate rula pe majoritatea sistemelor de operare, de la UNIX, Linux, Windows, sau Mac OS X și poate interacționa cu majoritatea servereler web.

PHP -ul este unul din cele mai folosite limbaje de programare server-side, conform unui studiu efectuat de Netcraft în aprilie 2002, apărând pe 9 din cele 37 milioane de domenii cercetate în studiu. De asemenea, există un grafic al creșterii folosirii PHP -ului pe site-ul oficial. Popularitatea de care se bucură acest limbaj de programare se datorează următoarelor caracteristici :PHP

Familiaritatea : sintaxa limbajului este foarte ușoară combinând sintaxele unora din cele mai populare limbaje Perl sau C;

Simplitatea : sintaxa limbajului este destul de liberă. Nu este nevoie de includere de biblioteci sau de directive de compilare, codul PHP inclus într-un document executându-se între marcajele speciale;

Eficiența : PHP-ul se folosește de mecanisme de alocare a resurselor, foarte necesare unui mediu multiuser, așa cum este Web-ul;

Securitatea : PHP-ul pune la dispoziția programatorului un set flexibil și eficient de măsuri de siguranță;

Flexibilitatea : fiind apărut din necesitatea dezvoltării Web-ului, PHP a fost modularizat pentru a ține pasul cu dezvoltarea diferitelor tehnologii. Nefiind legat de un anumit server web, PHP-ul a fost integrat pentru numeroasele serevere web existente: Apache, IIS, Zeus, server, etc.;

Gratuitatea : este probabil cea mai importantă caracteristică a PHP-ului. Dezvoltarea PHP-ului sub licența open-source a determinat adaptarea rapidă a PHP-ului la nevoile Web-ului, eficientizarea și securizarea codului.

Bibliografie

1. Emanuel Baruch………………………………………………………….Internet pentru profesioniști

2. Florin Fortiș………………………………………………………………………..Limbajul HTML

3. Judith S. Bowman………………………………………………………The practical SQL Handbook: Used Structured Query Language, Addison-Westley

4. Mircea Sîrbu…………………………………………………………….PHP (Hypertext Preprocessor)

5. Valentin Ivascu…………………………………………………………Initiere in PHP si MySql

5. Paul DuBois……………………………………………………………. MySQL,  New Riders, 1999

6. WWW.net-solution.RO ……………………………………………………..Imaginile folosite pe site au fost luate de pe acest site.

7. WWW.MySQL.COM ………………………………………Informatii folosite în cadrul siteului.

8.WWW.SECURITYFOCUS.COM……………….. Securing PHP: Step-by-Step, Artur Maj

Bibliografie

1. Emanuel Baruch………………………………………………………….Internet pentru profesioniști

2. Florin Fortiș………………………………………………………………………..Limbajul HTML

3. Judith S. Bowman………………………………………………………The practical SQL Handbook: Used Structured Query Language, Addison-Westley

4. Mircea Sîrbu…………………………………………………………….PHP (Hypertext Preprocessor)

5. Valentin Ivascu…………………………………………………………Initiere in PHP si MySql

5. Paul DuBois……………………………………………………………. MySQL,  New Riders, 1999

6. WWW.net-solution.RO ……………………………………………………..Imaginile folosite pe site au fost luate de pe acest site.

7. WWW.MySQL.COM ………………………………………Informatii folosite în cadrul siteului.

8.WWW.SECURITYFOCUS.COM……………….. Securing PHP: Step-by-Step, Artur Maj

Similar Posts