Documente Academic
Documente Profesional
Documente Cultură
Tehnologii Internet PDF
Tehnologii Internet PDF
FACULTATEA DE INGINERIE
TEHNOLOGII INTERNET
note de curs i aplicaii
pentru studenii Facultii de Inginerie
2007
Cuvnt nainte,
i
Ultimul capitol, al aselea, "Crearea paginilor Web cu
Dreamweaver" face o scurt introducere n unul dintre cele mai utilizate
programe de proiectare a paginilor Web, i anume Adobe Dreamweaver.
Autorul
ii
1. Conceptele Internetului
Suita de protocoale TCP-IP definete serviciile pentru aplicaii Telnet, FTP (File
Transfer Protocol), http (Hypertext Transfer Protocol), DNS (Domain Name System),
RIP (Routing Interface Protocol), SMTP (Simple Mail Transfer Protocol), POP (Postal
Office Protocol), ECHO i multe altele (Figura 1.3). Aceste servicii i aplicaii sunt
implementate n sistemele de operare i prin urmare disponibile ca resurse software i
de comunicaie nc de la punerea n funciune a resurselor de calcul. mpreun cu
celelalte tehnologii ITC ele formeaz resursele baz de plecare pentru definirea
aplicaiilor de afaceri.
7
Tehnologii Internet
8
Cap 1: Conceptele Internetului
afaceri finale, accentul se poate pune pe calitatea componentelor de gestiune a
documentelor semnate digital, sau pe securitatea legturilor multimedia etc.
Necesitatea conectrii firmei la internet este manifestat prin alegerea a cel puin
unui operator de telecomunicaii. Operatorul va instala la sediul firmei canalul de
comunicaie contractat, eventual echipamentele i serviciile software necesare firmei
pentru comunicaia Internet.
10
Cap 1: Conceptele Internetului
Un rol foarte important n portofoliul soluiilor de comunicare disponibile
firmelor contemporane sunt soluiile de comunicare bazate pe telefonia mobil.
Serviciile oferite de operatorii de telecomunicaii mobile sunt foarte variate i includ
soluii de cofinanare a investiiei iniiale. Terminalele reelelor de telefonie mobil sunt
capabile s transmit i s prelucreze sunete, imagini, filme, aplicaii la cerere cum sunt
cititoare detectoare de coduri de bare, soluii de identificare bazate pe tehnologia RFId,
s asocieze datelor coordonatele geografice calculate pe baza tehnologiilor GPS (Global
Positioning System) i s foloseasc sisteme de transmisiuni securizate bazate pe
semnturi digitale.
Pe msur ce reeaua Internet a evoluat, au aprut i s-au dezvoltat servicii
fundamentale. La rndul lor, serviciile au influenat gradul de folosire i de extindere a
Internet-ului. Dintre acestea, cele care au avut un impact deosebit sunt (Roca et al.,
2004):
Servicii de baz:
o Nume n adres IP: Domain Name System (DNS)
o Pot electronic: Protocolul pentru transport potal Simple Mail
Transport Protocol (SMTP) i protocolul pentru oficiul potal Post
Office Protocol (POP)
o Web: World Wide Web (WWW)
o Transfer fiiere: File Transfer Protocol (FTP)
o Servicii de tiri: News Transport Protocol (NNTP)
o Voce: Voice over IP (VoIP)
Servicii avansate
o Servicii de stocare n siguran bazate pe serviciul web (WebDAV)
o Protocoale securizate: Secure IP (IPSec), Virtual
o Private Network (VPN)
o Semnturi digitale, Certificate digitale
o Servicii pentru echilibrarea ncrcrii reelei: Network load balancing
(NLB)
o Servicii pentru autentificare de la distan: Remote Authentication Dial
In User Service (RADIUS)
Servicii de integrare n reeaua Internet a altor tipuri de reele de telecomunicaii:
o Serviciul Web integrat cu sistemul de mesaje scurte SMS al reelelor de
telefonie mobil GSM.
o Integrarea serviciului SMS al reelelor de telefonie mobil cu sistemul de
pot electronic SMTP i POP.
o Serviciul Wireless Access Protocol pentru integrarea navigatoarelor
telefoanelor mobile cu serviciile web
Servicii speciale
o Integrarea aplicaiilor bazate pe sisteme distribuite i eterogene prin
apelul procedurilor la distan prin protocolul web i XML: Extensible
Markup Language Web services
o Servicii pentru interogarea de la distan a coleciilor de date: Reporting
services
o Gzduire a aplicaiilor, bazelor de date sau a sistemelor de calcul.
(Hosting Services) Tendina actual este aceea de a folosi tehnologiile de
virtualizare care permit gzduirea mai multor sisteme de calcul virtuale
(sisteme de operare) ntr-un singur sistem fizic.
11
Tehnologii Internet
Lista serviciilor poate continua cu servicii complexe ce nu pot fi cuprinse ntr-o
anume categorie, dar se bazeaz pe principiul conectivitii
Internet, pe schimbul de documente digitale convenit prin contractul ntre pri i
pe o anumit modalitate de securizare i decontare.
Modelul de afaceri pe baza cruia firma utilizeaz canalele de telecomunicaii
prin care menine conexiunea cu reeaua Internet poate fi de tip:
Decontare bazat pe timpul exploatrii. Model bazat pe capacitate de date
limitat a canalului, canal pe care firma nu l utilizeaz permanent. Acest tip de
decontare este ce mai adesea utilizat n cazul conexiunilor prin linii telefonice
comutate sau prin reelele de telefonie mobil (Dial-up). Bugetul asociat acestui
model de exploatare este variabil.
Canal cu band partajat, buget fix. Model de decontare n care nu este garantat
calitatea serviciului, dar valoarea este limitat la o valoare fix. Caracteristicile
tehnice ale acestui tip de contract sunt utile unei prezene Internet permanente de
performan redus.
Canal de comunicaie cu band garantat i buget fix. Acest tip de contract poate
cuprinde i garania calitii serviciului. Cunoscut i sub numele de contract
utilizator de band larg (broadband) devine contractul standard pentru
exploatare n mediul de afaceri. Pe baza bugetului fix i al garaniei serviciului
firma poate defini o prezen internet continu i supus unor norme de calitate,
design i serviciu la nivelul ateptrilor partenerilor.
Decontare bazat pe buget variabil cu o component fix i una variabil n
relaie cu exploatarea bazat pe timp a unor resurse de comunicaie partajate.
13
2. Servicii Internet sub Free BSD
FreeBSD este un sistem de operare liber Unix-like descendent din AT&T
UNIX prin ramura Berkeley Software Distribution (BSD), mai exact provine din
sistemele de operare 386BSD i 4.4BSD. Ruleaz pe calculatoare cu procesoare
compatibile cu familia Intel x86, dar i pe procesoare DEC Alpha, UltraSPARC (al
firmei Sun Microsystems), Itanium (IA-64), AMD64, PowerPC, PC-98, ARM i MIPS.
FreeBSD este un sistem de operare complet, dezvoltat unitar. Nucleul, driverele
pentru dispozitive i utilitarele din spaiul utilizatorului, cum ar fi interpretorul de
comenzi sau shell-ul, sunt inute n acelai arbore de urmrire a revizuirilor codului
surs (CVS). Aceast metod de dezvoltare vine n contrast cu cea folosit pentru Linux
(un sistem de operare similar, dar mai bine cunoscut), unde nucleul este dezvoltat de o
echip de dezvoltatori, utilitarele din spaiul utilizator i aplicaiile sunt dezvoltate de
alte echipe (cum ar fi proiectul GNU), iar apoi toate acestea sunt mpachetate mpreun
i publicate de alte echipe sub form de distribuii Linux.
Ca sistem de operare, FreeBSD este privit n general ca fiind foarte fiabil i
robust, iar dintre sistemele de operare ce raporteaz la distan timpul de funcionare de
la ultima iniializare a sistemului (uptime) [1], FreeBSD este cea mai
popular alegere dintre sistemele de operare libere afiate n lista
Netcraft a primelor 50 de servere web cu cel mai lung uptime [2]
(uptime n unele versiuni de GNU/Linux nu poate fi calculat). Un
uptime lung indic de asemenea faptul c nu au fost necesare
actualizri ale nucleului sistemului de operare, pentru c instalarea
unui nou nucleu implic reiniializarea sistemului i rescrierea de la
zero a contorului sistemului. Fig. 1: Mascota
proiectului
2.1. Istoria i dezvoltarea FreeBSD FreeBSD:
Dezvoltarea iniial a sistemului FreeBSD a nceput n 1993, pornind de la
sursele 386BSD. Totui, din cauza ngrijorrilor privind legalitatea tuturor surselor
folosite n 386BSD i a unui proces ntre Novell (pe atunci proprietarul drepturilor
pentru UNIX) i Berkeley, FreeBSD a sfrit prin reproiectarea unei mari pri a
sistemului pentru versiunea FreeBSD 2.0 (ianuarie 1995), folosind versiunea 4.4BDS-
Lite de la Universitatea din California, Berkeley. Manualul FreeBSD (n limba
englez)1 cuprinde mai multe date istorice despre geneza sistemului de operare
FreeBSD.
Poate cel mai notabil ctig al versiunii FreeBSD 2.0 a fost restructurarea
sistemului Mach Virtual Memory (memorie virtual Mach) al CMU-ului original, care a
fost optimizat pentru performan sub ncrcri mari, precum i crearea sistemului de
porturi, care face ca descrcarea, construirea i instalarea de software din surse tere
foarte uoar. FreeBSD echipeaz situri de mare succes cum ar fi: cdrom.com (un
depozit imens de software care a dobort multe recorduri din internet), Hotmail i
Yahoo!.
FreeBSD 3.0 a adus mai multe schimbri: mutarea la formatul binar ELF, suport
iniial pentru sistemele SMP i de asemenea a adugat suport pentru o nou platform
pe 64 bit: Alpha. La vremea sa, ramura 3.X a fost sever criticat pentru c multe
1
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/history.html
14
Cap 2: Servicii Internet sub Free BSD
schimbri nu erau evidente n beneficiul i afectarea performanei, dar a fost un pas
necesar pentru dezvoltarea a ceea ce avea s fie ramura de mare succes 4.X.
Iniial, FreeBSD a folosit i pe post de logo mascota BSD Daemon, dar n anul
2005 a fost organizat o competiie pentru un logo propriu. Pe data de 8 octombrie,
2005, competiia a luat sfrit, iar proiectul propus de Anton K. Gural a fost ales s
devin logo FreeBSD. BSD Daemon, rmne ns mascota proiectului FreeBSD (fig. 1).
2
http://www.freebsd.org/doc/en_US.ISO8859-1/books/dev-model/
15
Tehnologii Internet
2.1.2. FreeBSD 6 i 7
FreeBSD 6.1 a fost lansat n 8 mai, 2006, iar 7.0-CURRENT este n dezvoltare
activ. Aceste versiuni continu s lucreze la optimizri SMP i threading, la zona
funcionalitii avansate a 802.11 i la auditarea evenimentelor de securitate
TrustedBSD. Realizrile primei versiuni ale acestora includ nlturarea Giant lock din
VFS, nlocuirea bibliotecii libthr cu o implementare 1:1 pentru threading care se execut
mai bine, i adugarea unei implementri de audit BSM, numit OpenBSM creat de
proiectul TrustedBSD, care se bazeaz solid pe implementarea BSD gsit n producia
Open Source de la Apple: Darwin, publicat sub o licen de tip BSD.
2.1.4. Licen
Ca i sistemele de operare surori, codul din FreeBSD este publicat sub termenii
diferitelor licene. Totalitatea codului nucleului i cea mai nou creat de cod este
publicat sub termenii licenei BSD cu dou clauze, care permite tuturor s foloseasc i
s redistribuie FreeBSD dup dorin. Exist de asemenea pri publicate sub alte
licene: GPL, LGPL, ISC, licen BSD cu trei clauze, licen BSD cu patru clauze.
Pentru unele funcionaliti particulare, exist de asemenea i binare fr cod
surs cum ar fi Atheros HAL pentru funcionalitate wireless i o unealt doar n format
binar pentru AAC RAID de la Adaptec.
16
Cap 2: Servicii Internet sub Free BSD
2.1.5. Produse derivate din FreeBSD
O gam larg de produse sunt bazate direct sau indirect pe FreeBSD. Aceast
gam cuprinde de la dispozitive de tip embedded (integrate), cum ar fi rutere Juniper
Networks i sisteme de operare firewall de la Nokia, la poriuni ntregi ale altor sisteme
de operare incluznd aici Linux i RTOS WxWorks. Darwin, inima Mac OS X de la
Apple, se bazeaz n mare msur pe FreeBSD incluznd aici sistemul de fiiere virtual,
stiva de reea i componente din spaiul utilizator. Apple continu s integreze cod nou
din FreeBSD i contribuie napoi ctre FreeBSD cu schimbri. Produsul open source
OpenDarwin, dezvoltat original din codul de baz al Apple dar acum entitate separat,
include de asemenea cod FreeBSD n mod substanial. n plus exist cteva sisteme de
operare originale desprinse din sau bazate pe FreeBSD incluznd aici PC-BSD i
DesktopBSD, care include mbuntiri destinate utilizatorilor de acas sau staiilor de
lucru; distribuiile FreeSBIE i Frenzy live CD; produsele firewall embedded m0n0wall
i pfSense; DragonFly BSD o notabil desprindere din FreeBSD 4.8 conceput pentru o
strategie de sincronizare multiprocesor diferit care a fost apoi aleas pentru FreeBSD 5
i dezvoltarea unor caracteristici microkernel (micronucleu); i nu n ultimul rnd
RoFreeSBIE, un proiect rezultat colaborrii membrilor ROFUG.
2.1.6. TrustedBSD
Proiectul TrustedBSD ofer FreeBSD-ului un set de extensii de ncredere
pentru sistemul de operare, fiind iniiat de Robert Watson. Scopul proiectului a fost
implementarea conceptelor de la Common Criteria pentru Information Technology
Security Evaluation (evaluarea securitii tehnologiei informaiilor) i Orange Book.
Acest proiect rmne nc n dezvoltare, i multe din aceste extensii de ncredere au fost
integrate n lista de dezvoltare a FreeBSD 5.X, 6.X i acum 7.X-CURRENT.
Pincipalul obiectiv al proiectului TrustedBSD este contribuia la Access Control
Lists (listele de control al accesului), auditul evenimentului, atribuii extinse, capaciti
de acord fin i mandatory access control (control al accesului obligatoriu). Ca parte din
proiectul TrustedBSD, exist de asemenea un port care ruleaz pe FreeBSD al
implementrii FLASK/TE al NSA n SELinux. Contribuii mai recente includ
dezvoltarea OpenBSM, o implementare open source a API-ului Basic Security Module
(BSM, modul de securitate fundamental) al companiei Sun i un format de fiiere
pentru jurnale de audit, care suport un sistem de audit pentru securitate extins care
face parte din FreeBSD 6.1.
Dei majoritatea componentelor proiectului TrustedBSD sunt incluse n arborele
surs principal al FreeBSD, aceasta nu este singura lor destinaie. Multe caracteristici,
odat ajunse la maturitate, i gsesc locul n OpenBSD sau Darwin de la Apple
Computer.
17
Tehnologii Internet
2.2. Configurarea unui server multifuncional pe baza la
FreeBSD
2.2.1. Introducere:
Vom ncerca s instalm un server multifuncional pe baza sistemului de operare
din familia UNIX FreeBSD.
FreeBSD este un sistem comod organizat i se deosebete de cele alte sisteme de
operare UNIX prin distibutivul simplu i modalitatea simpl de instalare.
18
Cap 2: Servicii Internet sub Free BSD
16. O activm pe prima. Setm numele calculatorului, numele de domeniu, adresa
DNS, i IP-ul din reeaua din care face parte aceasta plac.
17. Activm a doua plac i cu ea procedm la fel.
18. Ieim din instalare i restartm calculatorul.
19. Felicitri ROUTER-ul este instalat
Server
FreeBSD
INTERNET
LAN local
10.7.0.0/16
NIC2 NIC1
10.7.0.1/16 195.131.31.240
3. Recompilam
config my
cd ../../depend/my
make depend && make && make install
4. Restartam computerul
shutdown -r now
/sbin/ipfw -f flush
/sbin/ipfw add 5000 divert natd ip from 10.7.0.0/16 to any out xmit
dc1
/sbin/ipfw add 5100 divert natd ip from any to 195.131.31.240
Dac este setat OK sau RELAY atunci de pe aceste hosturi sau IPuri, sau
nceputuri de IPuri se vor putea transmite scrisori. Dac este REJECT atunci nu se va
permite de transmis.
20
Cap 2: Servicii Internet sub Free BSD
3. n /etc/mail/aliases se pot notata sinonimele la utilizatori i liste de utilizatori.
Presupunem c dorim ca utilizatorul X s primeasc e-mailuri adresate i pe
numele X i pe Y. Atunci vom nota:
Y:X
Dac noi dorim ca adresa Y s se refere la mai muli abonai atunci scriem:
Dezarhivm:
gunzip imap.tar.Z
tar xvf imap.tar
Restartam serviciul
ps ax | grep inetd'
inem minte numrul din /usr/sbin/inetd wW i scriem kill HUP numrul.
Controlm, trebuie s lucreze ambele protocoale
21
Tehnologii Internet
Restartm serviciul
inetd kill HUP
Configurm serviciul
Copiem fiierul de configurare
cp /usr/local/etc/proftpd.conf.default /usr/local/etc/proftpd.conf
Acum n fiierul /usr/local/etc/proftpd.conf putem configura toate opiunile
dorite. Explicaii adugtoare sunt prezente aici http://www.proftpd.org/docs
Pentru PHP4
LoadModule php4_module libexec/libphp4.so
Pentru PHP5
LoadModule php5_module libexec/libphp5.so
Restartam apache
/usr/local/apache22/bin/apachectl restart
22
Cap 2: Servicii Internet sub Free BSD
Dezarhivm
tar -zxvf mysql-4.0.16.tar.gz -C /usr/local/src
Configurm instalarea
cd /usr/local/src/mysql-4.0.16
./configure --prefix=/usr/local/mysql --with-mysqld-user=mysql
Compilm
make
make install
23
Tehnologii Internet
# Get arguments from the my.cnf file,
# groups [mysqld] [mysql_server] and [mysql.server]
if test -x ./bin/my_print_defaults
then
print_defaults="./bin/my_print_defaults"
elif test -x $bindir/my_print_defaults
then
print_defaults="$bindir/my_print_defaults"
elif test -x $bindir/mysql_print_defaults
then
print_defaults="$bindir/mysql_print_defaults"
else
# Try to find basedir in /etc/my.cnf
conf=/etc/my.cnf
print_defaults=
if test -r $conf
then
subpat='^[^=]*basedir[^=]*=\(.*\)$'
dirs=`sed -e "/$subpat/!d" -e 's//\1/' $conf`
for d in $dirs
do
d=`echo $d | sed -e 's/[ ]//g'`
if test -x "$d/bin/my_print_defaults"
then
print_defaults="$d/bin/my_print_defaults"
break
fi
if test -x "$d/bin/mysql_print_defaults"
then
print_defaults="$d/bin/mysql_print_defaults"
break
fi
done
fi
# Hope it's in the PATH ... but I doubt it
test -z "$print_defaults" && print_defaults="my_print_defaults"
fi
#
# Test if someone changed datadir; In this case we should also read
the
# default arguments from this directory
#
extra_args=""
if test "$datadir" != "@localstatedir@"
then
extra_args="-e $datadir/my.cnf"
fi
parse_arguments `$print_defaults $extra_args mysqld mysql_server
mysql.server`
# Safeguard (relative paths, core dumps..)
cd $basedir
case "$mode" in
'start')
# Start daemon
if test -x $bindir/mysqld_safe
then
# Give extra arguments to mysqld with the my.cnf file. This script may
# be overwritten at next upgrade.
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file &
24
Cap 2: Servicii Internet sub Free BSD
# Make lock for RedHat / SuSE
if test -w /var/lock/subsys
then
touch /var/lock/subsys/mysql
fi
else
echo "Can't execute $bindir/mysqld_safe from dir $basedir"
fi
;;
'stop')
# Stop daemon. We use a signal here to avoid having to know the
# root password.
if test -s "$pid_file"
then
mysqld_pid=`cat $pid_file`
echo "Killing mysqld with pid $mysqld_pid"
kill $mysqld_pid
# mysqld should remove the pid_file when it exits, so wait for it.
sleep 1
while [ -s $pid_file -a "$flags" != aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
]
do
[ -z "$flags" ] && echo "Wait for mysqld to exit\c" || echo ".\c"
flags=a$flags
sleep 1
done
if [ -s $pid_file ]
then echo " gave up waiting!"
elif [ -n "$flags" ]
then echo " done"
fi
# delete lock for RedHat / SuSE
if test -f /var/lock/subsys/mysql
then
rm /var/lock/subsys/mysql
fi
else
echo "No mysqld pid file found. Looked for $pid_file."
fi
;;
'restart')
# Stop the service and regardless of whether it was
# running or not, start it again.
$0 stop
$0 start
;;
*)
# usage
echo "Usage: $0 start|stop|restart"
exit 1
;;
esac
Atribuim drepturi acestui fiier
chmod 700 mysql.sh
Lansm MySQL
/usr/local/etc/rc.d/mysql.sh start
25
Tehnologii Internet
Setm parola pentru adminul mysql
/usr/local/mysql/bin/mysqladmin -u root password PAROLA
Restartm calculatorul.
26
3. Servicii Internet sub Windows
3.1. Generaliti
n acest capitol se vor prezenta generaliti legate de sistemul de operare
Windows, cu exemplificri pe Windows 2000 server. Cum cursul nu se refer la sisteme
de operare, ci doar la implementarea tehnologiilor internet n acestea, nu vom insista
asupra variantelor de sisteme Windows, a modului de instalare i a diferitelor faciliti
furnizate de acestea, ci doar la acele module considerate utile i necesare pentru aplicaii
Internet.
Sistemul de operare Windows 2000 este sub licen Microsoft, i suport dou
tipuri de licen:
per server pentru stabilirea de ctre server a numrului de conexiuni
concurente;
per seat n care fiecare staie de lucru din domeniu are propriul su C.A.L.
(Client Access License) achiziionat o dat cu sistemul de calcul.
Prima variant este mai viabil deoarece ntr-o reea pot exista sisteme cu
diferite sisteme de operare care ar putea s nu aib un C.A.L. n modul de liceniere per
server, numrul de conexiuni este dat de numrul clienilor care a fost achiziionat odat
cu sistemul de operare. Acest numr poate fi schimbat i se stabilete funcie de
necesitile fiecrei reele.
La instalarea unui sistem de operare Windows server, avem la dispoziie mai
multe componente pe care le putem s le instalm sau nu. n continuare prezentm
cteva din acestea cu rolul i importana lor:
Certificate Service reprezint suportul pentru aplicaiile care utilizeaz chei
publice de securitate, permind instalarea i configurarea certificatelor de
autoritate (Certificate Authority);
Internet Information Service (IIS) reprezint serviciul care se instaleaz i se
configureaz pentru a putea pune la dispoziie fiiere via Web, utiliznd serviciul
HTTP. Atenie: nu instalai acest serviciu pe serverele de domeniu, pentru c
accesul prin http reprezint un risc de securitate suplimentar ntr-o reea de
calculatoare;
Network Monitor Tools o unealt din componenta Management and
Monitoring Tools, folosit pentru urmrirea traficului pe reea.
27
Tehnologii Internet
n Windows 200, serverul este un termen generic, care poate fi configurat n
funcie de necesiti. Un server de domeniu este recunoscut generic sub denumirea de
Domain Controler (DC), ntr-o reea putnd exista mai multe astfel de servere care
partajeaz informaia din Active Directory n scopul unei mai mari sigurane a reelei.
Proprietatea de Domain Controller este vzut n Windows 2000 ca un rol care
poate fi schimbat uor ntre diferitele servere din reea. primul server care a fost
configurat ca DC n reea este recunoscut i ca Master Domain Controller (MDC), toate
celelalte servere fiind Secondary Domain Controller (SDM).
28
Cap 3: Servicii Internet sub Windows
Extinderea domeniilor de la diferite niveluri ale arborelui DNS se poate realiza
prin crearea de proxy servere, care permit calculatoarelor unei reele s acceseze n
sens unic resursele reelei Internet, acestea nefiind vzute" din exterior.
n Windows 2000 Server, numele de DNS conine i numele de NetBIOS al
viitorului nume al domeniului de calculatoare.
n cazul nostru, vom folosi drept denumire a domeniului mydom.myorg.ro.
Numele complet al fiecrei staii din viitorul domeniu va fi format din numele acesteia
(NetBIOS Name) urmat de numele domeniului DNS.
Pasul urmtor este reprezentat de specificarea numelui de NetBIOS al
domeniului, propunerea implicit fiind reprezentat de prima categorie : mydom.
Locaia implicit a bazei de date cu informaiile din Active Directory este n
directorul WINNT, subdirectorul NTDS, pe discul pe care a fost instalat sistemul de
operare (n cazul nostru, partiia C :). Aceast locaie poate fi schimbat (prin apsarea
butonului Browse), dar nu v deranjeaz cu nimic dac rmne acolo. De asemenea,
log-urile (jurnalul de activitate) sunt salvate implicit la aceeai adres de pe disc.
Pentru ca anumite obiecte din Active Directory s poat fi accesibile din orice
punct al reelei, acestea trebuie s fie puse la dispoziie n reea prin crearea unui share.
Locul de salvare a acestor obiecte este n directorul WINNT, subdirectorul SYSVOL.
V recomandm s folosii opiunile implicite !
Utilitarul de instalare i configurare a Active Directory v ofer posibilitatea de
configurare n aceast etap a serverului DNS, se recomand instalarea i configurarea
automat a acestuia pe calculatorul curent.
Pasul 5 - Permisiunile
Aceast etap este foarte important din punctul de vedere al structurii reelei.
Prima opiune (Permissions compatible with pre-Windows 2000 servers) ofer
posibilitatea de a conecta la server staii care au instalat sisteme de operare mai vechi
dect Windows 2000. A doua opiune (Permissions compatible only with Windows 2000
servers) asigur o securitate mult mai bun domeniului creat.
n cazul n care toate staiile i serverele din domeniul creat au drept sistem de
operare Windows 2000 sau un sistem Windows mai nou, se recomandm a doua
opiune. Dac nu, atunci obligatoriu este utilizarea primei opiuni.
n cazul n care pe viitor pot exista cderi ale serviciului Active Directory,
serverul poate fi pornit n Directory Service Restore Mode care permite o recuperare a
informaiilor. Pentru accesul la aceast opiune avei nevoie de o parola. Pentru a accesa
opiunea de Restore, introducei CD-ul cu kit-ul de instalare a sistemului de operare n
unitatea de CD-ROM i repornii sistemul. Dup repornire, se lanseaz aplicaia Setup
de pe CD i alegei opiunea Restore (tasta R).
Pasul 6 - Ultima etap
Ultima etap ne prezint un scurt sumar al informaiilor configurate, dup care
se trece la configurarea efectiv a Active Directory.
Pentru a putea configura Active Directory avei nevoie de CD-ul de instalare a
sistemului de operare W2K Server, ntr-o etap anterioar, litera CD-ROM-ului a fost
schimbat cu Z : aa c fiierele de instalare trebuie cutate la aceast nou locaie, n
directorul I386 de pe discul d-voastr.
Finalizarea instalrii presupune n acelai timp repornirea serverului pentru
iniializarea noilor parametri de configurare a acestuia.
Dup repornire, n fereastra de conectare (Log On to Windows) apare o nou
list de opiuni din care putei alege domeniul la care v vei conecta. Pe fiecare staie
29
Tehnologii Internet
de lucru inclus n viitorul domeniu va aprea, pe lng numele domeniului, numele de
NetBIOS al staiei.
Pentru a nu mai vizualiza de fiecare dat la repornire fereastra de configurare a
serverului, dezactivai opiunea Show this screen at startup i nchidei fereastra.
Una dintre ultimele modificri pe care trebuie s le efectuai este reprezentat de
schimbarea adresei DNS de la configurarea adaptorului de reea din 127.0.0. l (adresa de
loopback) n adresa serverului care reprezint n acest moment i server de DNS :
1. RClick (pe pictograma My Network Places) Properties.
2. RClick (pe Local Area Connection) Properties.
3. Internet Protocol (TCP/IP) Properties introducei adresa serverului
la seciunea Preferea DNS server OK pentru vizualizarea n bara de aplicaii a
informaiilor despre conexiunea la reea, activai opiunea Show icon in taskbar when
connected) OK.
Pe discul C:, de pe sistem a aprut un nou director: Inetpub, toate noile pagini pe
30
Cap 3: Servicii Internet sub Windows
care le vei crea fiind gzduite n subdirectorul wwwroot.
Verificarea funcionalitii serverului se poate face lansnd Internet Explorer, iar
la adres se trece localhost. Pagina care se afieaz conine informaii despre versiunea
serverului, documentaia online, posibilitatea de administrare a serverului.
Pentru crearea propriilor pagini putei folosi orice editor de pagini Web sau
scrierea codului HTML a paginilor ntr-un editor de texte. n listing-ul urmtor se
prezint pagin de start n care se va specifica faptul c pagina este n construcie.
<HTML>
<HEAD>
<TITLE> Bun venit !! </TITLE>
</HEAD>
Un serviciu special care poate fi configurat n aceast etap este NAT (Network
Address Translatiori) care presupune ca staiile de lucru dintr-un anumit domeniu
(Intern) s poat accesa alte reele de pe Internet prin intermediul interfeei de reea
reale (cea cu conectare direct la Internet).
Instalarea serviciului NAT:
1. n Routing and Remote Access, RClick pe General din IP Routing New
Routing Protocol Network Address Tmnslation (NAT) OK.
2. RClick pe Network Address Translation (NAT) New Interface.
3. n fereastra New Interface for... click pe interfaa de reea care face legtur cu
reeaua privat OK.
4. n fereastra N.A.T. Properties activai opiunea Private interface connected io
private network OK.
5. RClick pe Network Address Translation (NAT) New Interface.
6. n fereastra New Interface for... click pe interfaa de reea care face legtur cu
reeaua Internet OK.
7. n fereastra N.A.T. Properties activai opiunea Public interface connected to the
Internet Translate TCP/UDP headers (recommended) OK.
Dup configurarea acestui serviciu, toate staiile de lucru din domeniul Intern
care au trecut de la proprietile TCP/IP la seciunea Gateway, IP-ul intern al serverului,
vor putea s acceseze alte reele de pe Internet.
Pentru controlul accesului, monitorizarea i controlul traficului precum i
configurarea unui firewall, trebuie instalat pachetul Microsoft Internet Security and
Acceleration Server 2000.
32
4. Protocoale si servicii
4.1. DNS (Domain Name Service)
4.1.1. Introducere
Domain Name System (DNS) este un sistem distribuit de pstrare i interogare a
unor date arbitrare ntr-o structur ierarhic (figura 4.1). Cea mai cunoscut aplicaie a
DNS este gestionarea domeniilor n Internet.
Caracteristicile sistemului de nume (DNS) sunt:
folosete o structur ierarhizat;
deleag autoritatea pentru nume;
baza de date cu numele i adresele IP este distribuit.
Fiecare implementare TCP/IP conine o rutin software (name resolver)
specializat n interogarea serverului de nume (DNS) n vederea obinerii translatrii
nume/adres IP sau invers.
nregistrarea resurselor
asociate cu un nume
"Zon
delegat" Zon de autoritate, administrat
de un name server
33
Tehnologii Internet
respectiv);
dac este autorizat, transmite rspunsul clientului;
dac nu, transmite o interogare altui server de nume pentru un rspuns autorizat;
obine rspunsul autorizat i transmite clientului un rspuns neautorizat; totodat
stocheaz rspunsul local pentru a rspunde la alte cereri pentru acelai nume.
resolverul de nume transmite rspunsul aplicaiei utilizator i l pstreaz ntr-un
cache pentru o anumit perioad;
dac name resolverul nu primete un rspuns ntr-un anumit timp, transmite
cererea urmtorului server de nume din list. Cnd lista este epuizat, va genera
o eroare.
DNS-ul foloseste n special protocolul UDP, port 53, pentru a deservi cererile.
Majoritatea tranzaciilor DNS constau ntr-o cerere UDP de la client, urmat de un
rspuns de la server. RFC1034 i RFC1035 definesc urmtoarele tipuri de nregistrri
manipulate de sistemul DNS:
nregistrarea A (adres) asociaz o adres IP unui nume;
nregistrarea AAAA este echivalent cu nregistrarea A, dar se aplic
protocolului IPv6;
nregistrarea CNAME este un pseudonim pentru un domeniu, care permite
coexistena a mai multor nume pentru o main, astfel nct s poat fi descris
mai bine existena anumitor servicii. De exemplu ftp, www, mail pot fi
CNAME-uri pentru maina test.exemplu.com ;
nregistrare MX (mail exchanger) definete numele serverelor de mail care
accept mail pentru un anumit domeniu. nregistrrile MX au asociat o
prioritate, sub form numeric, prioritatea cea mai mic, ca valoare, indicnd
serverul de mail principal;
nregistrarea PTR asociaz un nume de main unei adrese IP, fiind folosit n
special de serverele de mail (rezolvarea invers);
nregistrarea NS indic numele serverelor DNS care sunt autoritare pentru o
zon sau domeniu. Aceste nregistrri trebuie s conin numele canonice ale
mainii (numele canonic este cel indicat printr-o nregistrare A i care apare i n
nregistrarea PTR);
nregistrarea SOA (start of authority) indic, n primul rnd, serverul DNS
master pentru o anumit zon, precum i alte informaii, cum ar fi, de
exemplu,TTL-ul (time to live timpul maxim ct poate fi pstrat rspunsul DNS
de ctre serverele cache);
nregistrarea TXT permite administratorului sa insereze informaii suplimentare
intr-o inregistrare DNS.
35
Tehnologii Internet
transport pregtete re-negocierea cheii, de obicei dup transferarea a 1 GB de
date sau dup 1 or de la iniierea conexiunii;
Iniial nefuncional,
pachet_length padding_length payload Cel puin 4 bii apoi implementat n
aleatorii de umplutur concordan cu
uint32 byte byte
byte algoritmul i cheia
(pachet_length)- negociate
(padding_length) umplutur de lungime
-1 aleatorie negociere secret cu
algoritmul "mac"
calculare folosind o
Iniial necomprimat, apoi opional cheie public,
comprimat n conformitate cu numrul de secven
schema de comprimare negociat al pachetului i
(n general zlib) coninutul pachetului
Codul mesajului
autentificat
byte
Fig. 4.2: Arhitectura
pachetului SSH-2
mac_length
36
Cap 4: Protocoale i servicii
o "shell" pentru terminale shell, SFTP i cereri de execuie (inclusiv
transferuri SCP);
o "direct-tcpip" pentru expedierea conexiunilor client ctre server;
o "forwarded-tcpip" pentru expedierea conexiunilor server ctre client;
Securitatea SSH
n toate versiunile de SSH, este important verificarea cheilor publice
necunoscute nainte de a le accepta ca valide. Acceptarea unei chei publice de la un
atacator drept chei publica valid are efectul dezvluirii parolei transmise i permite
celui care o afl s atace.
Ac orice protocol criptat, SSH poate fi considerat cu risc de securitate de ctre
companiile care nu au ncredere n proprii utilizatori i care doresc sp trag cu urechea
la propriile comunicaii. n plus, SSH are integrat faciliti de tunelare care n fac mai
uor pentru utilizatori s obin pasaje a unor volume mari de informaii sau s
stabileasc puncte de intrare pentru acces intern neautorizat peste legturi SSH fa de
alte protocoale.
Partea de date este mai lung i de necitit din cauza compresiei gzip.
38
Cap 4: Protocoale i servicii
n cazul unei cereri POST variabilele nu se afl n URI, ci n partea body :
POST /wiki/Spezial:Search HTTP/1.1 Host: de.wikipedia.org Content-Type:
application/x-www-form-urlencoded Content-Length: 24
4.3.3. Versiuni
HTTP/0.9 - prima versiune dezvoltat de Tim Berners-Lee i echipa sa, fiind
foarte simplu, dar cu numeroase neajunsuri, fiind repede nlocuit de alte versiuni;
HTTP/1.0 versiune introdus n 1996 prin RFC1945, a adus numeroase
mbuntiri;
HTTP/1.1 versiune de mbuntire i reparare a neajunsurilor versiunii
anterioare;
4.3.4. Metode
Metodele disponibile sunt :
GET : este cea mai folosit metod, fiind utilizat atunci cnd este cerut o
resurs serverului.
HEAD : se comport exact ca metoda GET, dar serverul returneaz doar antetul
resursei, ceea ce permite clientului s inspecteze antetul resursei far a fi nevoit
39
Tehnologii Internet
s ia i corpul resursei.
PUT : metoda este folosit pentru a pune documente pe server, fiind inversul
metodei GET.
POST : a fost proiectat pentru a trimite date de intrare ctre server.
DELETE : este opusul metodei PUT.
TRACE : este o metod folosit de obicei pentru diagnosticare, putnd da mai
multe informaii despre traseul urmat de legtura HTTP, fiecare server proxy
adugndu-i semntura n antetul Via.
OPTIONS : este folosit pentru identificarea capacitilor serverului Web,
nainte de a face o cerere.
CONNECT : este o metod folosit n general de serverele intermediare.
Exemplu
Cererea clientului :
GET / HTTP/1.1
Host: www.example.com
Rspunsul serverului:
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Etag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html
42
Cap 4: Protocoale i servicii
DirectoryIndex index.php index.html
</IfModule>
...
<IfModule mime_module>
....
AddType application/x-httpd-php .php
...
</IfModule>
Acestea fiind zise, se restarteaz sistemul i gata, avem un server web sub
Windows. Pentru a verifica dac totul e in regul, se creeaz un fiier test.php n
directorul C:/calea/catre/fisierele/siteurilor/tale
<?php
phpinfo();
?>
43
Tehnologii Internet
n ambele cazuri, dup instalare, trebuie editat manual fiierul de configurare al
serviciului, activat s porneasc automat odata cu pornirea sistemului de operare i
lansat n execuie.
Fiierul de configurare, pure-ftpd.conf, trebuie amplasat n directorul
/usr/local/etc (figura 4.4)
Fig.4.4: pure-ftpd.conf
Structura fiierului pure-ftpd.conf este prezentat n anexe. Important de
menionat este faptul c serverul a fost configurat s nu permit accesul anonim,
utilizatorul fiind blocat n directorul su (chroot), evidena utilizatorilor fiind pstrat n
sistemul nativ de baze de date, puredb.
Pentru a se putea crea utilizatori virtuali, n sistemul de operare trebuie creat un
cont de utilizator, care s nu aib posibilitate de login i director home. Acest utilizator
real este necesar deoarece, dup autentificarea prin protocolul ftp, utilizatorul virtual va
fi impersonalizat (va primi identitatea) acestui utilizator real.
n liniile de mai jos este prezentat secvena de comenzi pentru crearea
utilizatorului de sistem i a unui utilizator virtual.
ns1# adduser
Username: ftp
Full name: FTP Virtual user
Uid (Leave empty for default):
Login group [ftp]:
Login group is ftp. Invite ftp into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]: nologin
Home directory [/home/ftp]: /dev/null
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
Username : ftp
Password : <disabled>
Full Name : FTP Virtual user
Uid : 1005
Class :
Groups : ftp
44
Cap 4: Protocoale i servicii
Home : /dev/null
Shell : /usr/sbin/nologin
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (ftp) to the user database.
Add another user? (yes/no): no
Goodbye!
ns1# pure-pw useradd admin -u ftp -g ftp -d /usr/local/ftp
Password:
Enter it again:
ns1# pure-pw mkdb
ns1# cd /usr/local/etc/rc.d/
ns1# ./pure-ftpd forcestart
Starting pureftpd.
Running: /usr/local/sbin/pure-ftpd -A -c50 -B -C8 -D -E -fftp -H
-I15 -lpuredb:/usr/local/etc/pureftpd.pdb -L2000:8 -m4 -s -U133:022 -
u100 -k99 Z
ns1# mkdir /usr/local/ftp
ns1# chown -R ftp:ftp /usr/local/ftp/
4.5.1. Funcionare
Comunicarea ntre client i server se realizeaz prin texte ASCII. Iniial clientul
stabilete conexiunea ctre server i ateapt ca serverul s-i rspund cu mesajul 220
Service Ready . Dac serverul e suprancrcat, poate s ntrzie cu trimiterea acestui
rspuns. Dup primirea mesajului cu codul 220, clientul trimite comanda HELO prin
care i va indica identitatea. n unele sisteme mai vechi se trimite comanda EHLO,
comanda EHLO indicnd faptul c expeditorul mesajului poate s proceseze extensiile
45
Tehnologii Internet
serviciului i dorete s primeasc o list cu extensiile pe care le suport serverul. Dac
clientul trimite EHLO iar serverul i rspunde c aceasta comand nu e recunoscut,
clientul va avea posibilitatea s revin i s trimit HELO.
Odat ce comunicarea a fost stabilit, clientul poate trimite unul sau mai multe
mesaje, poate ncheia conexiunea sau poate folosi unele servicii precum verificarea
adreselor de email. Serverul trebuie s rspund dup fiecare comand indicnd astfel
dac aceasta a fost acceptat, dac se mai ateapt comenzi sau dac exist erori n
scrierea acestor comenzi.
Pentru a trimite un mesaj se folosete comanda MAIL prin care se specific
adresa clientului. Dac aceast comand este corecta serverul va rspunde cu mesajul
250 OK. Clientul trimite apoi o serie de comenzi RCPT prin care specific destinatarii
mesajului. Serverul va rspunde cu 550 No such user here, sau 250 OK, n funcie
de corectitudinea comenzii primite. Dup ce se specific destinatarii, i serverul accept
comenzile, se trimite comanda DATA, prin care serverul e anunat c expeditorul va
ncepe s scrie coninutul mesajului. Serverul poate rspunde cu mesajul "503
Command out of sequence" sau "554 No valid recipients" dac nu a primit comenzile
MAIL sau RCPT sau aceste comenzi nu au fost acceptate. Dac serverul va rspunde cu
mesajul 354 Start mail input, clientul va putea introduce textul mesajului. Sfritul
mesajului e marcat cu <CR><LF>.<CR><LF>.
46
Cap 4: Protocoale i servicii
Client: un mesaj test
Client: .
Server: Mail queued for delivery.
Client: QUIT
Server: 221 Closing connection. Bye.
47
Tehnologii Internet
trimis i fiecare linie se termin cu perechea CRLF. Cnd toate liniile rspunsului au
fost trimise, este trimis o linie final, care formeaz un octet terminal (cod zecimal
046, .) i perechea CRLF. Dac orice linie a rspunsului multi-linie ncepe cu acest
octet terminal, linia este completat cu octei terminali. Deci, un rspuns multi-linie se
termin cu 5 octei CRLF.CRLF. Cnd examineaz un rspuns multi-linie, clientul
verific s vad dac linia ncepe cu octetul terminal. Dac da i ceilali octei sunt
CRLF, primul octet al liniei (octetul terminal) este scos. Dac da i dac CRLF urmeaz
imediat caracterul terminal, atunci rspunsul de la serverul POP3 este terminat i linia
ce conine .CRLF nu este considerat parte a rspunsului multi-linie. O sesiune POP3
evolueaz direct printr-un numr de stri n timpul vieii ei. O dat ce conexiunea TCP a
fost deschis i severul POP3 a trimis salutul, sesiunea ntr n stare de
AUTHORIZATION. n aceast stare, clientul trebuie s se identifice serverului POP3.
O dat ce clientul a fcut acest lucru cu succes, serverul i formeaz resursele asociate
n funcie de maildrop-ul clientului, i sesiunea ntr n starea de TRANSACTION. n
aceast stare, clientul cere aciuni serverului POP3. Cnd clientul a emis comanda
QUIT, sesiunea ntr n starea de UPDATE. n aceast stare, serverul POP3 elibereaz
orice resurs dobndit n timpul strii de TRANSACTION i spune goodbye. Apoi
conexiunea TCP este nchis. Serverul trebuie s rspund la o nerecunoatere,
neimplementare sau o comand invalid printr-un indicator de stare negativ. Serverul
trebuie s rspund unei comenzi cerute cnd sesiunea este ntr-o stare incorect, printr-
un indicator de stare negativ. Nu exist o metod general pentru un client care s
disting un server ce nu are implementat o comand opional, de un server care nu
dorete sau nu poate s proceseze o comand. Un server POP3 poate avea timp de
inactivitate (autologout). Ca timp trebuie s fie cel puin 10 minute. Primirea oricrei
comenzi de la client n timpul acelui interval, este de ajuns s reseteze autologout
timer. Cnd timpul expir, sesiunea nu poate intra n starea de UPDATE serverul ar
trebui s nchid conexiunea TCP fr a terge nici un mesaj sau fr a trimite vreun
rspuns clientului.
STAT
Argumente: nici unul
Restricii: Poate fi dat doar n starea TRANSACTION
Comentariu: Serverul POP3 emite un rspuns pozitiv ntr-o linie care conine
informaii pentru maildrop. Aceast linie este numit drop listing pentru acea csu
potal. Cu scopul de a simplifica analiza, toate serverele POP3 au nevoie s utilizeze
un format sigur pentru drop listing. Rspunsul pozitiv const din +OK urmat de un
singur spaiu, numrul de mesaje din maildrop, un singur spaiu, mrimea maildrop-ului
n octei. Acest memo nu determin nici o condiie ce urmeaz dup mrimea maildrop-
ului. Implementrile minimale ar trebui doar s sfreasc linia de rspuns.
De observat c acele mesaje marcate pentru tergere nu sunt numrate n total.
Rspunsuri posibile:
+OK nn mm
LIST
LIST [msg]
Argumente: Un numr de mesaj (opional), care, dac este prezent, nu poate s
se refere la un mesaj marcat pentru tergere.
Restricii: Pot fi date doar n starea TRANSACTION
Rspunsuri posibile:
+OK scan listing follows
-ERR no such message
RETR
RETR msg
Argumente: Un numr de mesaj (obligatoriu) ce nu se refer la un mesaj marcat
pentru tergere.
Restricii: Poate fi dat doar n faza de TRANSACTION
Comentariu: Dac serverul POP3 emite un rspuns pozitiv, atunci rspunsul dat
este multi-linie. Dup +OK inial, serverul POP3 trimite mesajul corespunzator
numrului de mesaj, fiind atent la completarea caracterului terminal.
Rspunsuri posibile:
+OK urmat de mesaj
-ERR no such mesaj
DELE
DELE msg
Argumente: Un numr de mesaj (obligatoriu) care nu poate s se refere la un
mesaj marcat pentru tergere.
Restricii: Poate fi dat doar n starea de TRANSACTION
Comentariu: Serverul POP3 marcheaz mesajele ca terse. Orice viitoare
referin la numrul asociat mesajului ntr-o comand POP3 genereaz eroare. Serverul
POP3 nu terge efectiv mesajul pn cnd sesiunea POP3 nu ntr n starea UPDATE.
Rspunsuri posibile:
+OK message deleted
-ERR no such message
50
Cap 4: Protocoale i servicii
NOOP
Argumente: nici unul
Restricii: Poate fi dat doar n starea TRANSACTION
Comentariu: Serverul POP3 nu face nimic, doar rspunde cu rspunsuri pozitive.
Rspunsuri posibile: +OK
RSET
Argumente: nici unul
Restricii: Poate fi dat doar n starea TRANSACTION
Comentariu: Orice mesaj marcat de serverul POP3 pentru tergere este demarcat.
Serverul POP3 rspunde apoi cu un rspuns pozitiv.
Rspunsuri posibile: +OK
QUIT
Argumente: nici unul
Restricii: nici una
Comentariu: Serverul POP3 terge toate mesajele marcate pentru tergere din
maildrop i rspunde cu privire la starea acestei operaii. Dac exist o eroare, ex.
resurs lips, ntmpinat n timpul tergerii mesajelor, s-ar putea ca nite mesaje sau
nici unul din cele marcate pentru tergere s nu fie terse. Chiar dac operaia s-a
realizat cu succes sau nu, serverul elibereaz orice acces exclusiv i nchide conexiunea
TCP.
Rspunsuri posibile:
+OK
-ERR some deleted message not removed
TOP
TOP msg n
Argumente: Un numr de mesaj (obligatoriu) care nu poate s se refere la un
mesaj marcat pentru tergere i un numar pozitiv de linii (obligatoriu).
Restricii: Poate fi dat doar n faza TRANSACTION
Comentariu: Dac serverul POP3 emite un rspuns pozitiv, atunci rspunsul dat
51
Tehnologii Internet
este multi-linie. Dup iniialul +OK, serverul POP3 trimite headerele mesajului, o linie
goal separnd headerele de corp i apoi un numr de linii separate indicnd corpul
mesajului, fiind atent la completarea caracterul terminal. De observat c dac numrul
de linii cerute de clientul POP3 este mai mare dect numrul de linii ale corpului
mesajului, atunci serverul POP3 trimite ntregul mesaj.
Rspunsuri posibile:
+OK top of mesaage follows
-ERR no such message
UIDL
UIDL [msg]
Argumente: Un numr de mesaj (optional), care, dac e prezent, nu poate s se
refere la un mesaj marcat pentru tergere.
Restricii: Poate fi dat doar n starea TRANSACTION
Comentariu: Dac un argument a fost dat, serverul emite un rspuns pozitiv cu o
linie coninnd acel mesaj. Aceast linie este numita unique-id listing pentru acel
mesaj. Dac nu a fost dat nici un argument i serverul emite un rspuns pozitiv, atunci
rspunsul dat este multi-linie. Dup +OK iniial, pentru fiecare mesaj din maildrop,
serverul POP3 rspunde cu o linie ce conine informaii despre acel mesaj. n scopul
simplificrii analizei, toate serverele POP3 sunt obligate s utilizeze un format sigur
pentru unique-id listing. O lista cu id-ul unic const dintr-un numr de mesaj al
mesajului, urmat de un singur spaiu i de id-ul unic al mesajului. Nu urmeaz nici o
informaie id-ului mesajului din lista de Id-uri unice. Id-ul unic al mesajului este un
string determinat arbitrar de server, coninand 70 de caractere ntre 0x21 0x7E, care
identific unic un mesaj n cadrul unui maildrop i care persist n timpul sesiunii.
Aceast persisten este obligatorie chiar dac o sesiune se termin far a intra n stare
UPDATE. Serverul nu ar trebui s reutilizeze un Id unic ntr-un maildrop anume, att
timp ct entitatea ce utilizeaz Id-ul unic respectiv exist. De observat c mesajele
marcate pentru tergere nu sunt listate. Dei, n general, este preferabil ca
implementrile pentru server s pstreze Id-urile unice asignate arbitrar n maildrop,
aceast specificare intenioneaz s permit ca Id-urile unice s fie calculate ca a hash of
the message. Clienii ar trebui s poat trata situaia n care dou copii identice ale unui
mesaj din maildrop au acelasi Id unic.
Rspunsuri posibile:
+OK urmat de lista de id-uri unice
-ERR no such message
USER
USER nume
Argumente: Un ir de caractere identificnd o casu potal (obligatoriu), care
este semnificativ doar serverului.
Restricii: Poate fi dat doar n starea de AUTHORIZATION dup mesajul de
salut al serverului POP3 sau dup una din comenzile USER sau PASS terminate cu
eroare.
Comentariu: Pentru autentificare utiliznd comenzile USER i PASS, clientul
trebuie s emit mai nti comanda USER. Dac serverul POP3 rspunde cu un
indicator pozitiv (+OK), atunci clientul poate emite fie comanda PASS s completeze
autentificarea, fie comanda QUIT s termine sesiunea POP3. Dac serverul POP3
52
Cap 4: Protocoale i servicii
rspunde cu un indicator negativ de stare (-ERR) pentru comanda USER, atunci
clientul poate emite fie o comand nou de autentificare, fie comanda QUIT. Serverul
poate returna un rspuns pozitiv chiar dac nu exist nici o casu potal. Serverul
poate returna un rspuns negativ dac csua potal exist, dar nu permite autentificare
de parol tip plaintext.
Rspunsuri posibile:
+OK nume is a valid mailbox
-ERR never heard of mailbox nume
PASS
PASS ir caractere
Argumente: O parol de server/csu potal(obligatoriu).
Restricii: Poate fi dat doar n starea de AUTHORIZATION imediat dup o
comand USER ncheiat cu succes.
Comentariu: Cnd un client emite comanda PASS, serverul POP3 utilizeaz
perechea de argumente de la USER i comenzile PASS s determine dac clientului ar
trebui s i se permit accesul la maildrop-ul respectiv. Deoarece comanda PASS are
exact un argument, serverul POP3 poate trata spaiile n argument ca parte a parolei, n
loc de separatoare de argument.
Rspunsuri posibile:
+OK maildrop locked and ready
-ERR invalid password
-ERR unable to lock maildrop
APOP
APOP nume rezumat
Argumente: Un ir de caractere identificnd csua potal i un rezumat MD5
(amandou obligatorii).
Restricii: Poate fi dat doar n starea de AUTHORIZATION dup salutul
serverului POP3 sau dup una din comenzile USER sau PASS terminate cu insucces.
Comentariu: n mod normal, fiecare sesiune POP3 ncepe cu USER/PASS.
Aceasta sfrete serverul / id-ul user-ului specific, parola fiind trimis n reea. Multe
implementri de client POP3 se conecteaz la un server POP3 n mod obinuit pentru
a verifica mail-ul nou. n plus intervalul sesiunii iniiate poate fi de 5 minute. Deci,
riscul capturrii parolei este mare. Este necesar o metod alternativ de autentificare,
care s furnizeze cele dou metode originale de autentificare i protejare a rspunsului,
care s nu implice trimiterea parolei neprotejate n reea. Comanda APOP furnizeaz
aceast funcionalitate. Un server POP3 care implementeaz comanda APOP va include
o marc de timp n banner-ul mesajului de salut. Sintaxa acestei marcri a timpului
corespunde lui msg-id din RFC 822 i trebuie s fie diferit de fiecare dat cnd
serverul POP3 emite un banner de salut. De exemplu, ntr-o implementare UNIX n care
sunt utilizate procese UNIX separate pentru fiecare instan a serverului POP3, sintaxa
unei mrci de timp poate fi: process-ID.clock@hostname unde process-ID este o
valoare zecimal a PID-ului procesului, clock este o valoare zecimal a timpului
sistemului i hostname este numele complet al domeniului corespunztor gazdei unde
ruleaz serverul POP3. Clientul POP3 ia la cunotin de aceast marc de timp i apoi
emite comanda APOP. Parametrul nume are aceai semantic exact ca parametrul
nume din comanda USER. Parametrul rezumat este calculat prin aplicarea
53
Tehnologii Internet
algoritmului MD5 RFC 1321 unui ir de caractere compus din marca de timp (incluznd
parantezele unghiulare) urmat de informaia secret. Informaia secret (shared secret)
este un ir de caractere cunoscut numai de clientul i serverul POP3. Mare atenie ar
trebui acordat pentru a mpiedica o dezvluire neautorizat a secretului, cunoaterea
secretului va permite oricarei entitai s se ascund sub acel nume de user. Parametrul
rezumat este o valoare pe 16 octei care este trimis n format hexazecimal, utiliznd
caracterele ASCII lower-case. Cnd serverul POP3 primete comanda APOP, verific
rezumatul furnizat. Dac rezumatul este corect serverul POP3 emite un rspuns pozitiv
i sesiunea POP3 intr n starea TRANSACTION. Altfel, un rspuns negativ este emis
i sesiunea POP3 rmne n starea AUTHORIZATION. De observat c, lungimea
informaii secrete crete, deci i dificultatea. Ca atare, informaiile secrete ar trebui s
fie de lungime mare (mult mai mult de 8 caractere ca n ex. de mai jos).
Rspunsuri posibile:
+OK maildrop locked and ready
-ERR permission denied
4.6.2. Concluzii
De cnd caracteristicile principale descrise mai sus au fost adugate la protocolul
POP3, s-a acumulat experien n utilizarea lor pe scar larg n operaii de post office
unde cei mai muli utilizatori nu se cunosc unii cu ceilali. n aceste situaii i altele,
utilizatorii i vnztorii de clieni POP3 au descoperit c o combinaie ntre comanda
UIDL i neemiterea comenzii DELE, poate furniza o versiune slab de depozit
maildrop semi-permanent avnd o funcionalitate normal asociat cu IMAP. Desigur
alte caliti IMAP, aa cum verificnd o conexiune existent pentru mesajele noi sosite
i suportnd foldere multiple pe server, nu sunt prezente n POP3. Cnd aceste faciliti
sunt utilizate ocazional de ctre utilizatori, exist o tendin de recitire a mesajelor
acumulate pe server far limit. Acesta este clar un tip de comportament nedorit din
punctul de vedere al operatorului de server. Aceast situaie este agravat de faptul c
posibilitile limitate ale POP3-ului nu permit manipularea eficient a maildrop-urilor
care au mii de mesaje. n consecin, este recomandat ca operatorii de servere multi-
users la scar larg, n special cei care au acces la maildrop doar via POP3, s considere
urmtoarele alternative:
Impunnd alocarea de spaiu de depozitare a maildrop-ului. Un dezavantaj al
acestei opiuni este c acumularea de mesaje poate provoca neputina utilizatorului de a
primi noi mesaje n maildrop. n situaiile n care se alege aceast opiune ar trebui s se
asigure informarea utilizatorilor asupra acestui impediment sau epuizarea spaiului,
poate prin inserarea unui mesaj potrivit n maildrop-ul userului.
Impunnd o poli de asigurare privind pstrarea pe server. Utilizatorii sunt
liberi s stabileasc aceast poli de asigurare privind depozitarea i pstrarea
mesajelor pe server, cele citite i cele necitite. De exemplu, un utilizator poate terge
mesajele necitite de pe server dup 60 de zile i pe cele citite dup 7 zile. tergerile de
mesaj sunt n afara protocolului POP3 i nu sunt considerate o violare de protocol.
Operatorii de server impunnd poliele de asigurare cu privire la tergerea mesajelor ar
trebui s aib grij s fac toi utilizatorii contieni de puterea acestora. Clienii nu
trebuie s presupun c o poli va terge automat mesajele i ar trebui s continue s
tearg explicit mesajele utiliznd comanda DELE cnd este cazul. De notat c
impunerea acestor polie de asigurare de tergere poate fi confuz pentru utilizatorii
54
Cap 4: Protocoale i servicii
simpli, deoarece clientul lor POP3 poate conine opiuni de configurare de a terge mail-
ul de pe server, care nu va fi de fapt suportat de server. Un caz special al polielor este
c mesajele pot fi doar download-ate odat de pe server i sunt terse dup ce acesta a
terminat operaia. Aceasta ar putea fi implementat de un server POP3 prin urmtorul
mecanism: urmrind un login de client POP3 care a terminat prin QUIT, terge toate
mesajele download-ate n timpul sesiunii cu comanda RETR. Este important s nu se
tearg mesajele dac conexiunea s-a ncheiat printr-un eveniment anormal (ex. dac
QUIT nu a fost primit de la client) deoarece clientul poate nu a primit sau nu a salvat cu
succes mesajele). Serverele ce implementeaz poliele downloadeaz-i-terge pot de
asemenea s doreasc s dezactiveze sau s limiteze comanda TOP, dei ar putea fi
utilizat ca un mecanism alternativ pentru a downloada toate mesajele.
55
Tehnologii Internet
Protocolul SSL permite schimbul de nregistrri; fiecare nregistrare poate fi, n
mod opional, compresat, criptat i mpachetat cu un cod de autentificare al
mesajului (englez: message authentication code - MAC). Fiecare nregistrare are un
cmp numit content_type care specific care protocol superior este folosit.
Cnd conexiunea demareaz, nivelul nregistrare ncapsuleaz un alt protocol, de
tip handshake protocol, pentru care cmpul content_type are valoarea 22.
Clientul trimite i primete mai multe structuri de handshake:
Trimite un mesaj ClientHello n care specific lista de metode de criptare care
sunt suportate, metodele de compresie i cea mai actual versiune a protocolului
cunoscut. De asemenea transmite o secven aleatoare de bii care va fi folosit
ulterior.
Primete mai apoi un ServerHello, n care serverul alege parametrii conexiunii
din mulimea de opiuni oferit de client mai devreme.
Cnd parametrii conexiunii sunt cunoscui, clientul i serverul schimb
certificatele (n funcie de algoritmul de codare pentru chei publice ales). Aceste
certificate sunt n prezent de tip X.509, dar exista de asemenea un document care
specific utilizarea certificatelor bazate pe OpenPGP.
Serverul poate solicita un certificat clientului, astfel nct conexiunea s fie
mutual autentificat.
Clientul i serverul negociaz un secret comuni numit "master secret", existnd
aici opiunea folosirii rezultatului schimbului Diffie-Hellman, sau mai simplu prin
criptarea secretului cu cheia privat i decriptarea acesteia cu cheia privata a
partenerului. Toate datele legate de chei sunt derivate din acest "master secret" (i de
valori generate aleator de ctre client sau de ctre server), care sunt schimbate atent prin
funcia atent proiectat de "Funcii pseudoaleatore".
Istoria i dezvoltarea
Dezvoltat de ctre Netscape, versiunea SSL 3.0 a fost lansat n 1996, care mai
apoi a devenit baza dezvoltrii versiunii 1.0 a TLS, un protocol standard IETF definit
pentru prima dat n RFC 2246. Visa, MasterCard, American Express i alte cteva
instituii financiare au susinut utilizarea SSL pentru comerul prin Internet.
SSL este conceput modular: autorii si l-au proiectat pentru a fi extins i pentru a
suporta compatibilitatea nainte i napoi, precum i cu negociere ntre enpoint-urile
aflate n conversaie.
Utilizri incorecte
Anumite pagini web au fost criticate pentru folosirea incorect a SSL i prin
urmare a tuturor beneficiilor care decurg din comunicaiile securizate. Astfel de utilizri
incorecte includ:
securizarea numai a paginilor care presupun completarea de formulare, dar
nesecurizarea paginii de autentificare a utilizatorilor;
afiarea de pagini securizate mpreun cu coninut nesecurizat.
57
5. Limbaje de programare i tehnologii Web
5.1. Introducere
Tehnologiile utilizate n aplicaiile Web reprezint n general, acele limbaje de
programarea utilizate la crearea de site-uri web complexe, interactive, al cror concept
presupune stpnirea ct mai detaliat a unor limbaje de scripting sau de programare i
baze de date. n categoria tehnologiile Web se pot include o multitudine de limbaje de
programare, cum ar fi PHP, JavaScript, ASP etc., iar ca baze de date pot fi utilizate
MySQL, MsSQL, Access etc.
Cteva aplicaii Web ntalnite mai des sunt portalurile, forumurile, magazinele
virtuale, formularele de nscriere, licitaiile on-line etc.
Acum civa ani, tehnologiile Web erau folosite doar de marile companii
datorit, n principal, costurilor ridicate ale licenelor programelor de dezvoltare. n
prezent, datorit dezvoltrii tot mai accentuate a soluiilor Open Source, oricine i poate
permite realizarea aplicaii web.
Se pot enumera o serie de tehnologii folosite mai des n programarea aplicaiilor
web dinamice, i anume:
HTML - Aprut la nceputul anilor '90, datorit lipsei unui limbaj universal care
s permit publicarea informaiei la nivel global, HTML a determinat
dezvoltarea spectaculoas a Internetului.HTML ( Hypertext Markup Language ).
Marcajele de tip HTML din cadrul documentului spun browser-ului cum s
afieze coninutul util al fiierului;
XHTML - reprezint prescurtarea de la EXtensible HyperText Markup
Language (denumirea oficiala a standardului). Practic este un nlocuitor modern
al mai vechiului limbaj HTML;
CSS - Fiierul CSS (cascading style sheet - foi de stil n cascad). Un fier CSS
este un fiier text cu extensia ".css" definind stiluri pentru paginile HTML.
Fiierele CSS permit stilizarea n bloc a documentelor HTML cu un efort
semnificativ mai mic dect n cazul stilizrii elementelor de pagin n cadrul
fiecrui document HTML n parte, prin intermediul atributelor tagurilor.
JAVASCRIPT - este un limbaj de scripting dezvoltat la origine de Netscape,
permind scrierea de secvene de program care se execut la apariia unui
eveniment utilizator.
FLASH : este un mediu de lucru dezvoltat de compania Macromedia, cu
ajutorul FLASH-ului se poate realiza un design de calitate, coninut interactiv,
animaii profesionale.
MYSQL este un sistem de gestiune a bazelor de date relaionale, fiind o
component cheie a limbajului PHP
CGI - Common Gateway Interface - sunt scripturi scrise n orice limbaj de
programare indiferent dac este compilat sau interpretat, scripturi care sunt
executate pe server;
ISAPI - Internet Server API - reprezint alternativa celor de la Microsoft la CGI
(Common Gateway Interface), rulabil bineneles pe platforme Windows.
Acesta poate fi scris n orice limbaj cu suport pentru dll-uri. Rezultatul
compilrii va fi un fiier .dll. ISAPI are o serie de avantaje fata de CGI. O
alternativ la ISAPI este NSAPI. Acesta se utilizeaz n cadrul serverului
58
Cap 5: Limbaje de programare i Tehnologii Web
Netscape;
PHP i ASP aprute n 1994, respectiv 1996, sunt dou limbaje puternice care
au adus o schimbare n design-ul aplicaiilor web. Acestea, dei sunt diferite, au
totui o serie de similariti: ambele sunt interpretate, ambele genereaz scripturi
(.php respectiv .asp), care pot fi combinate cu HTML, date de tip text etc.
Limbajele ofer suport i pentru lucrul cu baze de date (MySQL, MsSQL,
PostgreSQL, Oracle) - de fapt sunt intens folosite n acest sens. Limbajul ASP
nu este un concept nou ci se bazeaz pe limbajele VBScript i JScript.
Principalul dezavantaj al acestor doua limbaje este viteza. Acestea sunt lente
deoarece fiecare accesare presupune procesarea i interpretarea lor i nu pot
construi controale reutilizabile.
JSP - Java Server Pages - reprezint o tehnologie de design al aplicaiilor web ce
permite crearea acestor aplicaii independente de platform. Tehnologia se
bazeaz pe limbajul de programare Java i marcatori XML. Avantajul JSP este
reprezentat de administrarea facil, independent de platform, separarea logicii
aplicaiei de partea de interfa utilizator, performana;
ASP.NET - este o nou tehnologie pentru aplicaii web elaborat de Microsoft,
dar despre care nu se poate spune dac este o urmare a ASP-ului, cu toate c
pstreaz compatibilitatea cu acesta
5.2. HTML
5.2.1. Introducere
HyperText Markup Language (HTML) este un limbaj de marcare utilizat pentru
crearea paginilor web ce pot fi afiate ntr-un browser (sau navigator). Scopul HTML
este mai degrab prezentarea informaiilor paragrafe, fonturi, tabele .a.m.d. dect
descrierea semanticii documentului.
Specificaiile HTML sunt dictate de World Wide Web Consortium (W3C).
HTML este un format text proiectat pentru a putea fi citit i editat de oameni
utiliznd un editor de text simplu. Totui scrierea i modificarea paginilor n acest fel
solicit cunotine solide de HTML i este consumatoare de timp. Editoarele grafice
cum ar fi Macromedia Dreamweaver, Adobe GoLive sau Microsoft FrontPage permit ca
paginile web sa fie tratate asemntor cu documentele Word, dar cu observaia c aceste
programe genereaz un cod HTML care este de multe ori de proast calitate.
HTML se poate genera direct utiliznd tehnologii de codare din partea serverului
cum ar fi PHP, JSP sau ASP. Multe aplicaii ca sistemele de gestionare a coninutului,
wiki-uri i forumuri web genereaz pagini HTML.
HTML este de asemenea utilizat n email. Majoritatea aplicaiilor de email
folosesc un editor HTML ncorporat pentru compunerea email-urilor i un motor de
prezentare a email-urilor de acest tip. Folosirea email-urilor HTML este un subiect
controversat i multe liste de mail le blocheaz intenionat.
59
Tehnologii Internet
5.2.2. Operatori, cuvinte cheie HTML
Caracteristicile i elementele componente ale unui document HTML:
<html> i </html> - orice document ncepe i se termin aceste tag-uri;
<head>...</head> - reprezint poriunea de antet a documentului, aici se poate
introduce titlul documentului ntre tag-urile <title> i </title>, precum i alte
elemente;
<body>...</body> - corpul documentului, cuprinde coninutul paginii HTML,
ceea ce va fi afiat pe ecran;
"<" i ">" - marcaje n document;
<br> - ntrerupere de linie, de la "line break", echivalentul lui Enter;
<p> - paragraf nou;
<hr> introduce o linie orizontala i trecerea la un rnd nou;
<pre>...</pre> - blocuri preformate browser-ul va interpreta corect caraterele
"spaiu", "tab" i "enter" pentru un text introdus ntre aceste tag-uri;
<! .> - introduce un ceomentariu.
Culoarea de fond
O culoare poate fi precizat n dou moduri:
printr-un nume de culoare. Sunt disponibile cel puin 16 nume de culori: aqua,
black, fuchsia, gray, green lime, maroon, navy, olive, purple, red, silver, teal,
white i yellow.
prin construcia " #rrggbb " unde r (red), g (green), sau b (blue) sunt cifre
hexazecimale i pot lua valorile: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, A, b, B, c, C, d, D,
e, E, f, F; se pot defini astfel 65536 de culori.
Culoarea textului
Acest lucru se face prin intermediul atributului text al etichetei <body> dup sintaxa
<body text=culoare>.
5.2.3. Fonturi
Un font este caracterizat de urmtoarele atribute:
culoare (stabilit prin atributul color);
tipul sau stilul (stabilit prin atributul face)
o familii generice: serif, sans serif, cursive, monospace i fantasy;
o instalate pe calculator;
mrimea (definita prin atributul size) ;
o 1, 2, 3, 4, 5, 6, 7 ( 1 pentru cel mai mic font i 7 pentru cel mai mare);
o +1, +2, etc. pentru a mari dimensiunea fontului cu 1, 2, etc. fa de
valoarea curent;
o -1, -2, etc. pentru a micora dimensiunea fontului cu 1, 2, etc. fa de
valoarea curent.
mrimea n puncte tipografice (stabilit prin atributul point-size);
grosime (definit prin atributul weight), valori posibile: 100, 200, 300, 400,
500, 600, 700, 800 i 900 (100 pentru fontul cel mai subire i 900 pentru cel
mai gros).
Blocuri paragraf
Cu ajutorul etichetei paragraf <p> este posibil trecerea la o linie nou i permite:
inserarea unui spaiu suplimentar nainte de blocul paragraf;
inserarea unui spaiu suplimentar dup blocul paragraf, dac se folosete
delimitatorul </p> (acesta fiind opional);
alinierea textului cu ajutorul atributului align, avnd valorile posibile "left",
"center" sau "right".
Blocuri de titlu
ntr-un text titlurile ( headers ) de capitole pot fi introduse cu ajutorul etichetelor
<h1>, <h2>, <h3>, <h4>, <h5>, <h6>.
Toate aceste etichete se refera la un bloc de text i trebuie nsoite de o etichet
de ncheiere similar </h1>, </h2>, </h3>, </h4>, </h5>, </h6>.
Aceste etichete accept atributul align pentru alinierea titlului blocului de text
la stnga (n mod prestabilit), n centru i la dreapta. Tag-ul <h1> permite scrierea unui
titlu cu caractere mai mari i aldine, pe cnd <h6> folosete caracterele cele mai mici.
Linii orizontale
ntr-o pagin Web pot fi inserate linii orizontale. Acest lucru se face cu ajutorul
etichetei <hr>. Pentru a configura o linie orizontal se utilizeaz urmtoarele atribute
ale etichetei <hr>:
align permite alinierea liniei orizontal. Valorile posibile sunt " left " ," center "
i " right ";
width permite alegerea lungimii liniei;
size permite alegerea grosimii liniei;
noshade cnd este prezent definete o linie fr umbr;
color permite definirea culorii liniei.
Blocuri <center>
Blocul introdus de etichetele <center>...</center> aliniaz centrat toate
elementele pe care le conine.
Blocuri <nobr>
Blocul de text cuprins ntre etichetele <nobr>...</nobr> va fi afiat pe o singur
linie.
Blocuri <div>
Modalitatea cea mai eficient de delimitare i de formatare a unui bloc de text
este folosirea delimitatorilor <div>...</div>. Un parametru foarte foarte util pentru
stabilirea caracteristicilor unui bloc <div> (diviziune) este align (aliniere).
Valorile posibile ale acestui parametru sunt:
" left " ( aliniere la stnga );
" center " ( aliniere central );
62
Cap 5: Limbaje de programare i Tehnologii Web
" right " ( aliniere la dreapta ).
Un bloc <div>...</div> poate include alte subblocuri. n acest caz, alinierea
precizat de atributul align al blocului are efect asupra tuturor subblocurilor incluse n
blocul <div>;
Un bloc <div>...</div> admite atributul "nowrap" care interzice ntreruperea
rndurilor de ctre browser.
Exemplu:
<html>
<head>
<title> Blocul <div></title>
</head>
<body>
Paragraf normal urmat de paragraf aliniat la dreapta.
<div align="right">
paragraf pe o singura linie aliniat la dreapta.<br>
</div>
<div align="center">
Paragraf aliniat pe centru.<br>
</div>
</body>
</html>
5.2.5. Imagini
Imaginile sunt stocate n fiiere cu diverse formate. Formatele acceptat de browsere
pentru fiierele imagine sunt:
GIF (Graphics Interchange Format) cu extensia .gif;
JPEG (Joint Photographic Experts Group) cu extensia .jpeg sau .jpg;
XPM (X PixMap) cu extensia .xmp;
XBM (X BitMap) cu extensia .xbm;
BMP (BitMap) cu extensia .bmp (numai cu Internet Explorer);
TIFF (Tagged Image File Format) cu extensia .tif sau .tiff;
Cele mai rspndite formate sunt GIF(8bii pentru o culoare, 256 culori posibile)
i JPEG (24bii pentru o culoare, 16777216 de culori posibile).
Tag-ul folosit pentru inserarea unei imagini n pagin este <img> i are
urmtoarele atribute:
src = sursa, locul unde se afla imaginea, adresa URL("Uniform Resourse
Locator" = identificator unic al resursei); Dac imaginea se afla n acelai
director cu fiierul HTML care face referire la imagine, atunci adresa URL a
imaginii este format numai din numele imaginii, inclusiv extensia.
width = limea imaginii;
height = nlimea imaginii;
alt = numele care nlocuiete imaginea pn aceasta se ncarc sau cnd nu a
fost gsit;
border = chenar (0 = lips bordur)
align = "center, right, left, top, middle, bottom" alinierea imaginii n pagin
hspace =" nr.ntreg", vspace =" nr.ntreg" - precizeaz distana n pixeli pe
63
Tehnologii Internet
orizontal, respectiv vertical, dintre imagine i restul elementelor din pagin.
Exemplu:
<html>
<head><title> Imagine cu chenar i mrit </title></head>
<body> O imagine cu chenar si de 200 pixeli X 15 %
<img src="imagie.jpg" align="center" border="5" width="350"
height="25%"> Text dup imagine.
</body>
</html>
64
Cap 5: Limbaje de programare i Tehnologii Web
ANCORE
ntr-o pagin foarte lung pot exista puncte de reper ctre care se definesc
legturi. O ancor se definete de asemenea prin eticheta <a>. Pentru a defini ancor se
utilizeaz atributul name care primete ca valoare un nume atribuit ancorei (de exemplu
"leg1").
Pentru a insera o legtura ctre "leg1" definit n aceeai pagin se utilizeaz
eticheta <a> avnd atributul href de valoare "#leg1".
Pentru a introduce o legtur ctre o ancor definit n alt document (alt
pagin) aflat n acelai director, atributul href primete o valoare de forma
"nume_fisier.html#nume_ancora".
Exemplu:
Ancora (definirea ei) <a name="nume">Ancora</a>
Link ctre ancora aflata n aceeai pagin <a href="#nume">napoi la ancora</a>
<a href="pagina.html#nume">Inapoi la
Link ctre ancora aflata n alta pagin
ancora din pagina.html</a>
5.2.7. Liste
Unul din cele mai obinuite elemente din documentele cu mai multe pagini este
un set de definiii, referine sau indexuri. Glosarele sunt exemple clasice n acest sens;
cuvintele sunt listate n ordine alfabetic, urmate de definiii ale termenilor respectivi. n
HTML, ntreaga seciune a unui glosar va fi gestionat printr-o lista de definitii, care
este inclus ntr-o pereche de marcaje de lista de definiii: <dl>...</dl> (de la "definition
list" = lista de definiii).
Observaii:
un termen al listei este iniiat de eticheta <dt> (de la "definition term" = termen
definit);
definiia unui termen este iniiata de eticheta <dd> (de la "definition description"
= descrierea definitiei);
definiia unui termen ncepe pe o linie nou i este indentat;
Liste neordonate
O list neordonat este un bloc de text delimitat de etichetele corespondente
<ul>...</ul> ("ul" vine de la "unordered list" = list neordonat). Fiecare element al
listei este iniiat de eticheta <li> (list item).
Lista va fi indentat fa de restul paginii Web i fiecare element al listei ncepe
pe un rnd nou.
Tag-urile <ul> i <li> pot avea un atribut type care stabilete caracterul afiat n
faa fiecrui element al listei. Valorile posibile al acestui atribut sunt:
o "circle" (cerc)
"disc" (disc plin) (valoarea prestabilita);
"square" (patrat)
65
Tehnologii Internet
<ul>
<li type = "square">Rosu</li> <li type = "circle">Galben</li>
<li type = "disc">Albastru</li> </ul>
</body> </html>
Liste ordonate
O list ordonat de elemente este un bloc de text delimitat de etichetele
corespondente <ol>...</ol> ("ol" vine de la "ordered list" = list ordonat). Fiecare
element al listei este iniiat de eticheta <li> (list item).
Tag-urile <ol> i <li> pot avea un atribut type care stabilete tipul de caractere
utilizate pentru ordonarea listei. Valorile posibile sunt:
" A " pentru ordonare de tipul A , B , C , D etc. ( litere mari );
" a " pentru ordonare de tipul a , b , c , d etc. ( litere mici );
" I " pentru ordonare de tipul I , II , III , IV etc. ( cifre romane mari );
" i " pentru ordonare de tipul i , ii , iii , iv etc. ( cifre romane mici );
" 1 " pentru ordonare de tipul 1 , 2 , 3 , 4 etc. ( cifre arabe - optiune prestabilita );
Tag-ul <ol> poate avea un atribut start care stabilete valoarea iniial a
secvenei de ordonare.Valoarea acestui atribut trebuie s fie un numr ntreg pozitiv.
Tag-ul <li> poate avea un atribut value care stabilete valoare pentru elementul
respectiv al listei. Valoarea acestui atribut trebuie s fie un numr ntreg pozitiv.
Listele ordonate pot fi imbricate ntre ele sau cu liste neordonate, ca n exemplul
urmtor.
<html>
<head><title>listex_8</title></head>
<body><h1 align="center">O lista ordonata de liste ordonate si
neordonate</h1><hr>
<ol>Un sistem informatic include:
<li>Hardware:
<ol>
<li>placa de baza
<li>procesor
<li>memorie
<li>harddisk
</ol>
<li>Software:
<ul>
<li>Linux
<li>Windows
<li>OS/2
<li>Unix
</ul>
<li>Software de aplicatie:
<ul type="disc">
<li>VisualC++
<li>Java
<li>SQL
<li>CorelDraw
</ul>
</ol>
</body>
</html>
O list de meniuri este un bloc delimitat de etichete corespondente
<menu>...</menu>. Fiecare element al listei este iniiat de eticheta <li> (list item).
66
Cap 5: Limbaje de programare i Tehnologii Web
Cele mai multe browsere afieaz lista de meniuri ca pe o list neordonat.
O list de directoare este un bloc delimitat de etichete corespondente
<dir>...</dir> (de la " director "). Fiecare element al listei este initiat de eticheta <li>
(list item). Cele mai multe browsere afieaz lista de directoare ca pe o list neordonat.
5.2.8. Tabele
Tabelele ne permit s crem o reea complex de cmpuri (celule), iar tabelele
stau la baza construirii marii majoriti a paginilor Web. Fiecare celul a tabelului are
propriile opiuni pentru culoarea fondului, culoarea textului, alinierea textului etc.
Instruciuni:
<table></table> - insereaz un tabel;
<tr></tr> - insereaz un rnd (tabel row);
<td></td> - insereaz o celul cu date;
67
Tehnologii Internet
nowrap aparine elementelor <td> i <th> i interzice ntreruperea unei linii de
text o coloan cu o lime orict de mare: <td nowrap>celula_mare</td>;
  introduce caracterul spaiu ntr-o celul, astfel nct aceasta sp aib
chenar (celulele vide nu au chenar) se folosete cu <td>;
<br> - are acelai efect ca i
frame specific prile din chenar care vor fi afiate, i ia valorile:
o void - elimin toate muchiile exterioare ale tabelului;
o above - afieaz o muchie n partea superioar a cadrului tabelului;
o below - afieaz o muchie n partea inferioar a cadrului tabelului;
o hsides - afieaz cate o muchie n partea superioar i inferioar cadrului
tabelului;
o lhs - afieaz o muchie n partea din stnga a cadrului tabelului;
o rhs - afieaz o muchie n partea din dreapta a cadrului tabelului;
o vsides - afieaz o muchie n partea din stnga i din dreapta a cadrului
tabelului;
o box - afieaz o muchie pe toate laturile cadrului tabelului;
o border - afieaz o muchie pe toate laturile cadrului tabelului;
Exemplu Tabel_1:
<html>
<head><title>tabelex_4</title></head>
<body><h1 align=center>Un tabel simplu colorat</h1><hr>
<table border="3" bgcolor="green">
<tr> <td>verde 11</td> <td bgcolor="red">rosu 11</td></tr>
<tr bgcolor="blue"> <td>albastru 21</td> <td bgcolor="yellow">galben
22</td></tr>
<tr bgcolor="cyan"> <td>cell 31</td> <td>cell 32</td></tr>
<tr> <td>cell 41</td> <td bgcolor="white">cell 42</td></tr>
</table>
</body>
</html>
68
Cap 5: Limbaje de programare i Tehnologii Web
Exemplu 1: Se creeaz o pagin Web cu trei cadre mixte. Se mparte fereastra n dou
subferestre orizontale, se umple prima subfereastr cu fiierul index.html, dup care se
mparte a doua subfereastr n dou coloane, una se umple cu winxp.gif i cealalt cu
index2.html.
<html>
<head><title>cadre</title></head>
<frameset rows="*,*">
<frame src="index.html">
<frameset cols="35%,*">
<frame src="winxp.gif">
<frame src="index2.html">
</frameset>
</frameset>
</body>
</html>
Cadre interne
Un cadru intern este specificat prin intermediul blocului <iframe>...</iframe>.
Un cadru intern se insereaz ntr-o pagina Web n mod asemntor cu o imagine
aa cum rezult din urmtorul exemplu:
<iframe src="pagina1.html" height=40% width=50%> </iframe>
n acest caz, s-a specificat o fereastr de cadru intern care are 40% din nlimea
i 50% din limea paginii curente.
Atributele acceptate de eticheta <iframe> sunt n parte preluate de la etichetele
<frame> i <frameset>, cum ar fi: rc, border, frameborder, bordercolor,
marginheight, marginwidth, scrolling, name, noresize; sau de la eticheta
<img> vspace, hspace, align, width, height;
<html>
<head><title>Cadre_interne</title> </head>
<body>
<a href="index1.html" target="icad">Pagina1</a><br>
<a href="index2.html" target="icad">Pagina2</a><br>
<a href="index3.html" target="icad">Pagina3</a><br>
<a href="index.html" target="icad">Acas</a><br>
<center><iframe width="60%" height="50%" border=2 bordercolor=red
name="icad" src="acasa.html">
Dac vedei acest text nseamn c browserul dumnevoastr nu suport cadre interne.
<a href="p0.html">Pagina fara cadre interne</a> </iframe></center>
</body>
</html>
5.2.10. Formulare
Un formular este un ansamblu de zone active alctuit din butoane, casete de
selecie, cmpuri de editare etc.
Formularele ajut la realizarea paginilor Web care permit utilizatorilor s
introduc informaii i s le transmit serverului. Formularele pot fi de la simple la
foarte complicate.
Un formular este definit ntr-un bloc delimitat de etichetele corespondente
<form> i </form>.
Elementul FORM
<form [action=url] [method=get/post] [enctype=MIMEType]
[onsubmit=script] [onreset=script] [acceptcharset=
set_caractere] [core] [international] [events]>
Elementele formularului
</form>
70
Cap 5: Limbaje de programare i Tehnologii Web
Elementul INPUT
<input
[type=text|password|checkbox|radio|submit|image|reset|button|hidden|
file] [name=nume]
[value=valoare] [checked] [disabled] [readonly] [size=latime]
[maxlength=cuvinte_maxime] [src=url]
[alt=altText] [usemap=url] [align=left|center|right|justify]
[tabindex=numar] [accesskey=keyCombo]
[onfocus=script] [onblur=script] [onselect=script] [onchange=script]
[accept=set_caractere] [core] [international]
[events]>
Acest element input este cel mai important in utilizarea formularelor.
Elementele unui formular sunt definite cu eticheta <input>, care are urmtoarele
atribute:
type - indic tipul datelor care vor fi introduse:
o text = text,
o submit = buton de trimitere / validare,
o reset = buton de reset / tergere,
o password = parola, acest cmp de editare nu afieaz caracterele n clar,
ci numai caractere *, care ascund de privirile altui utilizator aflat n
apropiere valoarea introdus ntr-un asemenea cmp.
o hidden = nu este vizibil,
o checkbox = caseta de validare, (checkbox) permite selectarea sau
deselectarea unei opiuni;
o radio = buton radio, permit alegerea, la un moment dat, a unei singure
variante din mai multe posibile;
o file = fiier pentru upload;
o select = list de selecie - permite utilizatorului s aleag unul sau mai
multe elemente dintr-o list finit.
71
Tehnologii Internet
Majoritatea tipurilor date de type pot primi urmtorii parametri:
- name permite ataarea unui nume fiecrui element al formularului;
- value permite atribuirea unei valori iniiale unui element al formularului
- size - numrul de caractere vizibile din cmp, dac se depete numrul de
caractere introduse, are loc o derulare a textului;
- maxlenght - numrul maxim de caractere introduse n cmpul de editare,
caracterele introduse n plus sunt neglijate;
- readonly - datele prezente n cmp nu pot fi modificate.
72
Cap 5: Limbaje de programare i Tehnologii Web
<option value="AR" selected> Arad
<option selected value="BC" selected> Bacau
<option value="B"> Bucuresti
<option value="BV"> Brasov
</select><br><br>
Exemplu final:
n exemplul urmtor este prezentat un formular coninnd elemente prezentate
anterior. Cmpurile formularului sunt incluse n celule unui tabel pentru a obine o
aliniere dorit.
<html>
<head><title>formex_10</title></head>
<body><h1>Un formular complex</h1> <hr>
<center><table bgcolor="orange"> <form action="mailto:xxxxx@xxx.com"
method="post">
<caption align="top">MENIU</caption>
<tr align=left><th>Numele:
<td><input type="text" name="numele">
<tr align=left><th>Preumele:
<td><input type="text" name="prenumele"> <tr align=left><th>Telefonul:
<td><input type="text" name="telefonul"> <tr align=left><th>Alegeti
pizza:
<td><input type="checkbox" name="ciuperci">cu ciuperci
<input type="checkbox" name="mexicana">mexicana <input type="checkbox"
name="europeana">europeana
<tr align=left><th>Alegeti plata:<td>
<ul style="background-color:lightblue;"> <li><input type="radio"
name="plata">cash <li><input type="radio" name="plata">card </ul> <tr
align=left><th>Comentarii:
<td> <textarea name="comentarii" cols="30" rows="5" wrap="off">
73
Tehnologii Internet
Inserati aici aprecierile dumneavoastra legate de calitatea
serviciilor noastre </textarea>
<tr align=left valign=top><td>
<input type="reset" value="sterge"><td> <input type="submit"
value="expedieaza">
</form></table></body>
</html>
Observaii:
elementul <form> poate avea un atribut target, care primete ca valoare
numele unei ferestre a browserului n care va fi ncrcat rspunsul trimis
serverului WWW la expedierea unui formular.
toate elementele cuprinse ntr-un formular pot avea un atribut disabled care
permite dezactivarea respectivului element.
toate elementele de tip text cuprinse ntr-un formular pot avea un atribut
readonly care interzice modificarea coninutului acestor elemente.
http://www.worklance.com/htmltutorial/
http://www.drogoreanu.ro/tutorials/index.php
5.4. XHTML
eXtensible HyperText Markup Language, sau XHTML, este un limbaj de
marcare ce are aceleai capabiliti expresive ca i HTML, dar cu o sintax mai strict.
XHTML poate fi considerat ca ncruciarea dintre HTML i XML n multe privine,
fiind o reformulare a HTML n XML. XHTML 1.0 a devenit o recomandare World
Wide Web Consortium (W3C) pe data de 26 ianuarie 2000
5.5. CSS
74
Cap 5: Limbaje de programare i Tehnologii Web
Stilurile interne
n acest caz, codul CSS va fi plasat n interiorul fiecrei pagini html n care vom
folosi stilurile respective, i v codul CSS va fi scris ntre tagurile <head></head>.
Acest lucru se face dup cum se poate vedea n exemplul de mai jos:
<head>
<title>titlu pagina</title>
<style type="text/css">Aici se definesc stilurile CSS</style>
</head>
Stilurile externe
n acest caz, se creeaz un fiier CSS extern (cu orice editor de text simplu:
Notepad, Wordpad) sau cu editoare avansate. De reinut c fiierul CSS va conine doar
cod CSS i trebuie salvat cu extensia *.css.
Inserarea acestui fiier .css n pagina (X)HTML se face foarte simplu,
prinplasarea unui link n seciunea <head></head> a fiecrei pagini n care dorim s
folosim stilul respectiv. Iat un exemplu de inserare a unui fiier extern .css ntr-o
pagin (X)HTML:
<link rel="stylesheet" type="text/css" href="Calea catre fisierul.css"
/>
sau se poate folosi metoda de import dup cum urmeaz:
<style type="text/css">@import url( Calea catre fisierul.css )</style>
Oricare dintre metode este bun i se obine plasnd unul dintre codurile de mai
sus n seciunea <head> </head> a paginii, dup cum se exemplific mai jos:
<head>
<title> titlu pagina </title>
<link rel="stylesheet" type="text/css" href="stil.css" />
</head>
sau
<head>
<title> titlu pagina </title>
<style type="text/css"> @import url( Calea catre fisierul.css )
</style>
</head>
Folosind metoda fiierelor CSS externe, toate paginile (X)HTML vor folosi
acelai fiier de stil. Asta nseamn c dac dorii s facei o schimbare care s aib
efect n toate paginile, este de ajuns s modificai un singur fiier, i anume cel de stil
(.css), i efectul se va observa pe toate paginile (X)HTML ce folosesc acel fiier. Astfel
facei schimbri n tot siteul, indiferent de cte pagini are, fr efort i mai ales foarte
repede.
Iat cteva motive pentru care aceasta metod este mai bun:
ntreinere mai uoar;
dimensiuni reduse ale paginilor;
economie de band internet;
75
Tehnologii Internet
flexibilitate;
ordinea cascadelor
De reinut c se pot folosi att stilurile externe ct i cele interne simultan, dar
mai exist o posibilitate, i anume a stilurilor n linie (inline style).
Stilurile in linie
Acest tip de stil (nu tocmai recomandat) se definesc chiar n codul (X)HTML, n
elementul pe care dorim s l stilizm, aa cum se vede mai jos:
<p style="color: #ff0000;">Text rou</p>
Text rou
Metoda cea mai bun este , n mod firesc, aceea care ne avantajeaz cel mai
mult. Trebuie reinut ordinea folosirii lor pentru o interpretare corect de ctre
browsere. Toate metodele, se vor executa n cascada, ntr-o "pseudofoaie de stil", n
ordinea urmtoare:
stiluri n linie;
foaie de stil intern;
foaie de stil extern.
Dac ne referim la "care este mai bun", putem spune c depinde de ceea ce v-
ai propus s realizai/obinei. Dac avei o singur pagin pe care trebuie s o stilizai,
putei folosi metoda stilurilor interne fr nici o problem. Pe de alt parte, dac avei de
stilizat un numr mare de pagini, cel mai bine este s folosii foile de stil externe. Modul
n care se vor implementa foile externe n pagini rmne la latitudinea proiectantului, i
se poate alege ntre metoda cu link sau metoda cu @import, dup cum sa exemplificat
mai sus.
Trebuie specificat ns c metoda importului (@import) va fi un pic mai greoaie,
fiind posibil s dureze o secund, dou, pn se ncarc foaia de stil, timp n care
coninutul este afiat nestilizat.
Utilizatorii cu dizabiliti
Folosirea foilor de stil externe mai are un avantaj major, i anume permit
vizualizarea coninutului paginii html i de ctre utilizatorii cu disabiliti. De exemplu,
utilizatorul respectiv, poate renuna la folosirea foii de stil pe care ai definit-o dvs i
poate aplica o foaie de stil special, a lui, care l ajut s vizualizeze pagina ntr-un mod
facil. Poate mri fontul, poate schimba culorile, etc.
Probleme de browser : nu toate browserele interpreteaz la fel stilurile. CSS-ul
va fi interpretat diferit de browsere, ceea ce va cauza dureri de cap. Exist totui metode
de rezolvare a acestor probleme, care vor fi explicate la momentul potrivit.
76
Cap 5: Limbaje de programare i Tehnologii Web
Selectorul:
selector { proprietate: valoare }
Motenirea:
Atunci cnd se plaseaz un element n interiorul altuia, elementul plasat va
moteni proprietile elementului n care a fost plasat. Asta doar daca nu se atribuie
aceleai proprieti ns cu valori diferite fiecrui element. De exemplu, un font
specificat pentru corp (body) va fi folosit n toat pagina, indiferent de elementul unde
este folosit, doar dac nu se specific un font diferit pentru elementul respectiv.
body {fontfamily: Verdana, serif;}
n acest caz, tot textul din fiierul (X)HTML va folosi fontul Verdana. Dac se
dorete folosirea unui alt font pentru un element anume (de exemplu pentru paragraf
sau pentru H1), va trebui s se defineasc acest lucru, cum este i n exemplul de mai
jos:
h1 {fontfamily: Georgia, sansserif;}
p {fontfamily: Tahoma, serif;}
Acum toate tagurile vor folosi fontul Georgia i toate paragrafele (<p>) vor
folosi Tahoma, lsnd totui restul textului (din alte taguri) neschimbat, folosind n
continuare Verdana.
Exist ns i cazuri n care elementele plasate n interiorul altor elemente, nu
motenesc proprietile acestora din urm. De exemplu, dac marginea pentru corp este
77
Tehnologii Internet
setat la valoarea de 20 pixeli, celelalte elemente din pagina nu vor avea i ele marginea
setat la 20 de pixeli.
body {margin: 20px;}
Combinarea selectorilor
Se pot combina elementele unui selector astfel:
h1, h2, h3, h4, h5, h6 {
color: #009900;
fontfamily: Georgia, sansserif;
}
Dup cum se observ n exemplul de mai sus, am grupat toate elementele de tip
header ntr-un singur selector. Ele sunt separate de virgule. Rezultatul acestui stil este
acela c toate tagurile header vor fi de culoare verde cu font Georgia. Dac un utilizator
nu are instalat pe sistem primul font (Georgia), atunci se va folosi n mod automat
urmtorul font, i anume sansserif.
Tagurile de comentarii
Comentariile, ca i n cazul programrii n alte limbaje, sunt foarte folositoare, i
pot ajuta la identificarea rapid a unui anume element sau rolul pe care acel element l
are. Se pot folosi comentariile i n fiierele .css, dup cum se exemplific n continuare:
/* Acesta este un comentariu si nu va fi interpretat de browsere */
Exemplu:
Ca s o spunem cat mai simplu, propoziia pe care o citii, este definit n
foaia de stil CSS astfel:
p {
fontsize: small;
color: #333333;
}
78
Cap 5: Limbaje de programare i Tehnologii Web
Rezultatul final arta aa:
Ca s o spunem ct mai simplu, "propoziia" pe care o citii, este definit
n foaia de stil CSS astfel
5.5.5.1. Divizii
Divizia poate fi definit ca: element de tip bloc folosit pentru definirea unor
zone din fiierul (X)HTML. O divizie poate conine toate prile care alctuiesc siteul
dvs., incluznd alte divizii, spanuri, imagini, text, etc. Se poate defini o divizie ntr-un
fiier (X)HTML, plasnd urmtorul cod ntre tagurile <body> </body> :
<div>
Coninutul sitului este plasat aici
</div>
79
Tehnologii Internet
Iar n fiierul css avem urmtorul cod:
#container{
width: 70%;
margin: auto;
padding: 20px;
border: 1px solid #666;
background: #ffffff;
}
Acum, tot coninutul din divizia noastr va fi stilizat dup regula "container", pe
care am definit-o n fiierul css. O divizie, realizeaz implicit o trecere la linie nou
(linebreak). Se pot folosi att ID-urile ct i clasele pentru stilizarea unei divizii n
cadrul siteului.
80
Cap 5: Limbaje de programare i Tehnologii Web
Dac este declarat o singur valoare, aceasta este valabil pentru toate cele 4
margini:
margin: 10px;
n cazul n care se declar doar dou sau trei dintre margini, valorile nedeclarate
sunt "luate" din partea opus:
margin: 10px 10px; /* 2 valori */
margin: 10px 10px 10px; /* 3 valori */
NOT: dac valoarea care se atribuie marginii este egal cu zero, nu mai este necesar
specificarea unitii de msur, fie ea pixel, punct, sau oricare alta.
Se poate observa n exemplul de mai jos, cum elementele sunt setate la 20px
(pixeli) fa de corp (body).
body{
margin: 20px;
background: #eeeeee;
fontsize: small;
fontfamily: Tahoma, Arial, "Trebuchet MS", Helvetica, sansserif;
textalign: left;
}
Daca se declar toate cele patru valori, ca n exemplul de mai sus, ordinea lor
este urmtoarea: 1. sus; 2. dreapta; 3. jos; 4. stnga
n cazul n care se declar o singura valoare, aceasta este valabila pentru toate
cele patru laterale ale elementului respectiv.
padding: 10px;
81
Tehnologii Internet
Dac se declar doar dou sau trei valori, valorile nedeclarate sunt luate din
prile opuse:
padding: 10px 10px; /* 2 valori */
padding: 10px 10px 10px; /* 3 valori */
Dup cum tii ordinea celor 4 valori este: sus, dreapta, jos, stnga. Cnd
declarai doar primele dou nseamn ca ai declarat valoarea pentru sus i pentru
dreapta. Valorile pentru celelalte dou vor fi: jos=sus, stnga=dreapta.
Daca nu declarai paddingul unui element, acesta va fi implicit egal cu zero.
NOTA: dac valoarea pe care o atribuii marginii este egala cu zero, nu mai este
necesara specificarea unitii de msur, fie ea pixel, punct, sau oricare alta.
Se poate vedea mai jos, cum containerul principal are paddingul setat la 30px
(pixeli) ntre marginea lui i textul coninut.
#container{
width: 70%;
margin: auto;
padding: 30px;
border: 1px solid #666;
background: #ffffff;
}
Exemplul de mai sus seteaz textul unui element, ca fiind italic, bold, de mrime
relativ, cu distana ntre linii de 1.4em i un font Verdana sau orice alt font de tipul
sansserif.
Familia de fonturi
Se poate stabili ce font va fi folosit la afiare cu ajutorul proprietii
"fontfamily".
Exist dou posibiliti pentru valori:
* familyname
* generic family
Mrimea fontului
Mrimea textului este dat de proprietatea "fontsize":
fontsize: valoare;
82
Cap 5: Limbaje de programare i Tehnologii Web
Exist o mulime de posibiliti pentru valoare: xxlarge, xlarge, larger, large,
medium, small, smaller, xsmall, xxsmall, length, % (procent).
Stilul fontului
Proprietatea "fontstyle" specific stilul fontului:
fontstyle: valoare;
Varianta fontului
Putem stabili varianta fontului cu ajutorul proprietii fontvariant:
fontvariant: valoare;
Pentru "valoare" se pot folosi urmtoarele variante: normal, smallcaps
Grosimea fontului
Grosimea fontului folosit este controlata de proprietatea "fontweight":
fontweight: valoare;
Posibilele valori sunt: lighter, normal, 100, 200, 300, 400, 500, 600, 700, 800,
900, bold, bolder.
NOT: Trebuie declarat "a:link" i "a:visited" nainte de "a:hover". Mai mult, trebuie
declarat "a:hover" naintea lui "a:active".
Folosind regula general de mai sus, toate linkurile din pagina dvs vor fi
afectate, i vor folosi aceast regul. Se pot seta stiluri de linkuri separate pentru
anumite poriuni din pagin, dac se dorete acest lucru.
83
Tehnologii Internet
5.5.5.7. Pseudo Clasele
Este posibil setarea de culori diferite pentru linkurile din pagin (de exemplu
meniul de o culoare, linkurile din text de o alt culoare, etc ) folosind pseudoclasele.
De exemplu, s spunem c se dorete ca linkurile din text s fie diferite de cele
din coloana din stnga sau dreapta. Se poate obine acest lucru astfel:
#content a:link {color: #009900;}
#content a:visited {color: #999999;}
#content a:hover {color: #333333;}
#content a:focus {color: #333333;}
#content a:active {color: #009900;}
Sunt i alte proprieti care pot fi aplicate linkurilor, aproape orice proprietate
folosit la stilizarea textului poate fi aplicat i la linkuri.
84
Cap 5: Limbaje de programare i Tehnologii Web
5.5.5.8. Fundaluri css
Mostenit: NU
Fundalul
Fundalul unui element poate fi stilizat cu o declaraie de proprietate adecvat.
background: #ffffff url(calea_catre_imagine) top left norepeat fixed;
Valori: attachment color image position repeat
Ataament fundal
Daca se folosete o imagine ca fundal, se poate specifica dac fundalul se mic
o dat cu pagina (la scroll vertical) sau este fix cu ajutorul proprietii
"backgroundattachment".
backgroundattachment: valoare;
Valori: fixed, scroll
85
Tehnologii Internet
Trebuie s spunem ns, c dac avem o pagin valid, asta nu nseamn
neaprat c ea va fi afiat corect pe toate browserele.
O resurs bun, n limba romn, pentru nceptorii n CSS este site-ul CssPlaza.
Prezint sintaxa css, tutoriale css, articole. http://www.cssplaza.com/tutoriale-css/
Serverul web Apache HTTP este un server web pentru sistemele Unix,
Microsoft Windows, Novell NetWare, MacOS si alte sisteme. Apache este un server
web important, foarte raspandit la scara mondiala in domeniul serverelor web Apache
este un server viabil, sub licenta open source/freeweare a venit ca alternativa a altor
servere web cunoscute si dezvoltate de companii precum SunMicrosystems, Microsoft
Serverul Web Apache este dezvoltat si mentinut de o comunitate de
programatori sub numele de Apache Software Foundation, fiind promovat sub licenta
Apache, Apache HTTP Server.
Pentru a putea accesa fisierele *.html din reea, n fiierul de configurare al
serverului apache, aflat n C:\Program Files\EasyPHP 2.0b1\conf_files httpd.conf,
trebuie adugat linia de comand listen adresa serverului, aa cum se vede mai jos:
#Listen 12.34.56.78:80
Listen 127.0.0.1:80
#Listen adresa IP a serverului, de exemplu:
Listen 192.168.1.2:80
87
Tehnologii Internet
Eficiena: PHP-ul se folosete de mecanisme de alocare a resurselor, foarte
necesare unui mediu multiuser, aa cum este Web-ul;
Securitatea: PHP-ul pune la dispoziia programatorului un set flexibil i eficient
de msuri de siguran;
Flexibilitatea: fiind aprut din necesitatea dezvoltrii 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
servere web existente: Apache, IIS, Zeus, server, etc.;
Gratuitatea: este probabil cea mai important caracteristic a PHP-ului.
Dezvoltarea PHP-ului sub licena open-source a determinat adaptarea rapid
PHP-ului la nevoile Web-ului, eficientizarea i securizarea codului.
88
Cap 5: Limbaje de programare i Tehnologii Web
5.7. Introducere n PHP
Primul script:
<?php
echo 'Acesta este un test <br>';// Acesta este un comentariu n
stil c++
/* Acesta este un comentariu multilinie
cu o alt form de comentariu*/
echo "Acesta este un alt test <br>";
echo 'un test final <br>'; # Acesta este un comentariu pe o linie
?>
echo afieaz pe ecran textul dintre ghilimele, care pot fi simple sau duble, dar
de acelai tip i la nceputul i la sfritul textului.
<br> - break sfrit de linie, se trece pe rndul urmtor.
89
Tehnologii Internet
o ir de caractere (string) dac irul este introdus ntre ghilimele duble
("), PHP nelege majoritatea caracterelor speciale, dac e introdus ntre
ghilimele simple ('), caracterele speciale trebuie precedate de (\);
Dou tipuri compuse:
o Vector (array) n PHP vectorii sunt mulimi formate din chei, fiecrei
chei i se ataeaz o valoare;
array( cheie => valoare
, ...
)
// cheia poate fi un ntreg sau un ir
// valoare poate fi orice valoare
exemplu:
<?php
$arr = array("foo" => "bar", 12 => true);
echo $arr["foo"]; // bar
echo $arr[12]; // 1
?>
o Obiect obiectele sunt iniializate de comanda class;
<?php
class Salut {
function show_Salut()
{ echo "Buna ziua tuturor studentilor muncitori."; }
}
$bar = new Salut;
$bar->show_Salut();
?>
Dou tipuri speciale:
o Resource aceste variabile sunt folosite pentru pstrarea unor referine
ctre anumite resurse externe (conexiuni la baze de date, fiiere), sunt
create i utilizate de anumite funcii;
o NULL este o valoare special atribuit oricrei variabile care nu a fost
iniializat. O variabil are tipul NULL dac: - i s-a atribuit constanta
NULL, nu a fost iniializat, a fost deziniializat (cu funcia unset()).
VARIABILE
n PHP variabilele sunt reprezentate de simbolul dolar $, urmat d numele
variabilei. Numele variabilei este case-senzitive. Numele unei variabile ncepe cu o
liter sau cu caracterul underscore _, urmat de restul numelui:
<?php
$var = 'Dan';
$Var = 'Ion';
echo "$var, $Var"; //se afieaz "Dan, Ion "
//pentru afiare, numele variabilei se introduce ntre ".." ghilimele
duble
90
Cap 5: Limbaje de programare i Tehnologii Web
$4site = 'not yet'; // invalid; ncepe cu un numr
$_4site = 'not yet'; // valid; ncepe cu underscore
$tyte = 'masina'; // valid; '' este (Extended) ASCII 228.
?>
Variabile predefinite:
$GLOBALS = pot fi accesate toate variabilele globale care sunt accesibile
script-ului PHP curent
$_SERVER = conine o serie de variabile ale cror valori sunt setate de server-ul
web; majoritatea valorilor variabilelor din acest vector depind de mediul de execuie al
script-ului curent.
$_GET i $_POST conin variabile primite de script prin intermediul unor
transferuri care folosesc metodele HTTP get, respectiv post. De exemplu, prin
intermediul acestor vectori, pot fi accesate valorile cmpurilor dintr-un formular care a
fost completat i transmis folosind una dintre cele dou metode.
$_COOKIE conine valorile variabilelor care cuprind informaii referitoare la
cookie-urile pstrate pe calculatorul utilizatorului ce acceseaz pagina web.
$_FILES conine variabile primite de script prin intermediul ncrcrilor de
fiiere prin metoda post.
$_ENV conine variabile disponibile prin intermediul mediului n care este
executat.
$_REQUEST conine variabile disponibile prin intermediul oricrui tip de
mecanism cu ajutorul cruia utilizatorul poate introduce date.
$_SESSION conine variabile care corespund sesiunii curente a script-ului.
CONSTANTE
O constant stocheaz o valoare, cum este i o variabil, dar aceast valoare,
dup ce a fost stabilit nu mai poate fi modificat n script.
Pentru a defini o constant, ne vom folosi de funcia define(); iar numele
constantelor este scris cu MAJUSCULE, aceasta opiune nu este obligatorie, nsa va
face codul dumneavoastra mai frumos i mai lizibil.
O diferenta importanta ntre constante i variabile, este faptul c o constant nu
are n faa ei semnul $.
<?php
define("SPEC", "Tehnologia Informatiei");
define("GRUPA", "231");
echo SPEC;
echo GRUPA; ?>
OPERATORI
Operatori aritmetici
Examplu Nume Rezultat
-$a Negaie Opusul lui $a.
$a + $b Adunare Suma lui $a i $b.
$a - $b Scdere Diferena dintre $a i $b.
$a * $b nmulire Produsul dintre $a i $b.
$a / $b mprire Raportul dintre $a i $b.
$a % $b modulo Restul mpririi lui $a la $b.
91
Tehnologii Internet
Operatori logici
Exemplu Nume Rezultat
$a and $b And TRUE dac $a i $b sunt TRUE.
$a or $b Or TRUE dac $a sau $b este TRUE.
$a xor $b Xor TRUE dac $a sau $b este TRUE, dar nu amndou.
! $a Not TRUE dac $a nu este TRUE.
$a && $b And TRUE dac att $a ct i $b sunt TRUE.
$a || $b Or TRUE dac $a sau $b este TRUE.
Exemplu 2:
<?php
if ($a >= $b) {
echo "a este mai mare dect b"; if (expresie)
} else { { declaraii }
echo "a nu este mai mare dect b"; else {
} declaraii }
?>
92
Cap 5: Limbaje de programare i Tehnologii Web
Exemplu 3:
<?php
if (expresie 1)
if ($a > $b) {
{ declaraii 1}
echo "a este mai mare dect b";
elseif(expresie 2)
} elseif ($a == $b) {
(declaraii 2)
echo "a este egal cu b";
else {
} else { declaraii 3 }
echo "a este mai mic dect b";
} ?>
93
Tehnologii Internet
Prima expresie este evaluat o singur dat, nainte de nceperea execuiei
ciclului. Expresia condiie este testatp naintea fiecrei repetri a buclei. Dac expresia
returneaz fals, repetarea se oprete.
Expresia 2 este executat la sfritul fiecrei repetri.
Instruciunea se execut la fiecare repetare a buclei.
Oricare dintre cele trei expresii poate lipsi; n cazul n care o expresie lipsete, se
consider c ea are valoarea true.
Bucla WHILE i FOR sunt identice din punct de vedere funcional ns bucla
FOR este puin mai complex.
<?php
for ($variabila = 1; $variabila <= 10; $variabila++) {
echo $variabila.'<br>';
}
?>
Exemplu de formular:
<html>
<head><title>Formular_1 </title></head>
<body> Formular cu un camp de editare<hr>
<form action="formular.php" method="post">
Nume: <input type="text" name="nume" value="" size=50 maxLength=15>
<br><br>
Prenume: <input type="text" name="prenume" value=""> <br><br>
Sex: Masculin <input type="radio" name="sex" value="M"> | Feminin
<input type="radio" name="sex" value="F"> <br><br>
Parola dorita: <input type="password" name="parola" value=""> <br><br>
<input type="submit" name="Trimite" value="Trimite">
<input type="reset" name="Reseteaza" value="Reseteaza">
</form>
</body>
</html>
Se pune codul ntr-un fiier formular.html, se salveaz i apoi se vizualizeaz
n navigatorul web accesnd http://localhost/formular.html
96
Cap 5: Limbaje de programare i Tehnologii Web
Metoda POST:
Fiierul formular.php, care prelucreaz datele introduse n formular.html arat
astfel:
<?php
echo $_POST['nume'];
?>
Genereaz
Schimb Server Web pagina
de date Apache Browser Web
Server
MySQL PHP Cerere de
pagin
fisier.php
98
Cap 5: Limbaje de programare i Tehnologii Web
n mod implicit, parola pentru root este nesetat (vid), iar la apsarea butonului
Execut se ncarc pagina urmtoare:
99
Tehnologii Internet
Deoarece existena contului root fr parol de acces este periculoas pentru
integritatea bazei de date, va trebui s-i setm o parol de access. Vom face aceasta
apsnd pe legtura "Drepturi de acces" sau "Privileges" dac interfaa este n englez.
Se va ncrca pagina cu drepturi de acces asupra MySQL, i n dreptul lui root apsm
pe butonul ce indic modificarea:
Apoi dup ce s-a ncrcat urmtoarea pagin, gasii unde apare Schimbare
parola i bifai Parola, apoi tastai parola dorit de dumneavoastr i n prima, i n
a-II-a csu, dup care apsai pe butonul Executa. Dup setarea parolei de root, mai
apare un cont de utilizator "Oarecare", fr parole i cu privilegii reduse.
100
Cap 5: Limbaje de programare i Tehnologii Web
Setare de baz valoarea implicit pe care o are cmpul la introducerea unei
noi nregistrri (n exemplul nostru, la Sex, implicit este M, de la masculin);
Extra dac cmpul se auto-incrementeaz (cu rol de numrtor);
- Cheie primar stabilit cmpului ID;
- Index;
- Unic indicat de aplicat la un cmp de tip CNP cod numeric personal;
- Tot textul;
Comentarii -
Pentru exemplul nostru se vor completa cmpurile dup cum se vede n figura de
mai jos, i apoi se apas butonul "Salveaz".
Pentru a aduga date n tabela proaspt creat, se apas butonul "inserare" din
meniul din topul paginii. Se completeaz cmpul "Valoare" cu datele pe care vrem s le
introducem n tabel.
OBS: Nu se va completa csua ID, deoarece ea este folosit pentru a aduga un
numr unic pentru fiecare intrare din baza de date acest numr este adugat pe SQL.
101
Tehnologii Internet
Comanda SQL:
INSERT INTO `bazadate1`.`tbl_Formular1` (
`ID` ,
`Nume` ,
`Prenume` ,
`Vrsta` ,
`Sex`
)
VALUES (
NULL , 'Popescu', 'Ion', '25', 'M'
);
Pentru a vizualiza
datele din tabel se apas
butonul "Navigare" din partea
de sus a paginii.
<?php
// Informatii baza de date
$AdresaBazaDate = "localhost";
$UtilizatorBazaDate = "root";
$ParolaBazaDate = "parola";
$NumeBazaDate = "bazadate1";
102
Cap 5: Limbaje de programare i Tehnologii Web
5.8.2.1. Comanda SELECT
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]]
SELECT este folosit pentru a extrage liniile selectate din una sau mai multe
tabele:
Fiecare select_expr indic coloana care trebuie extras;
Table_references indic tabelul sau tabelele din care vor fi extrase liniile;
where_definition sunt cuvinte cheie care indic ce condiie sau condiii trebuie
s le satisfac liniile pentru a fi selectate.
SELECT mai poate fi utilizat i pentru a extrage linii fr a se face referina la
vreun tabel, de exemplu:
Mysql> SELECT 1 + 1;
-> 2
103
Tehnologii Internet
Funcii folosite:
Sintaxa: mysql_query ( string query [, resource link_identifier] )
Explicaie: mysql_query() trimite o interogare unic (nu sunt premise ntrebri
multiple) ctre baza de date active care este asociat cu link_identifier.
104
Cap 5: Limbaje de programare i Tehnologii Web
Comanda INSERT insereaz noi linii ntr-un tabel existent. Cele dou forme
INSERT ... VALUES i INSERT ... SET ale instruciunii insereaz linii pe baza unor
valori explicit specificate. Forma INSERT ... SELECT insereaz liniile selectate din alt
tabel sau alte tabele; iar forma INSERT ... VALUES cu multiple valori listate este
suportat n versiunile MySQL 3.22.5 sau mai trzii. Sintaxa lui INSERT ... SET este
suportat de MySQL 3.22.10 sau mai trzii.
Elementele componente:
tbl_name este tabelul n care liniile vor fi inserate. Coloanele pentru care declaraiile
ofer valori pot fi specificate astfel:
Lista cu numele coloanelor sau clauza SET indic n mod explicit coloanele;
Dac nu se specific lista coloanelor pentru INSERT ... VALUES sau INSERT
... SELECT , valorile pentru fiecare coloan din tabel trebuie furnizate n lista
VALUES sau de SELECT. Dac nu se tie ordinea coloanelor din tabel, se poate
folosi DESCRIBE tbl_name pentru a le afla.
OBS: Dac sintaxa este corect, dar numele tabelei este incorect, pe ecran va fi
afiat mesajul de succes, dar n baza de date nu va fi introdus nimic.
Atenie: Dac la definirea tabelului ai folosit diacritice, (de ex. la Vrsta) vor
trebui folosite i n scriptul php.
105
Tehnologii Internet
Declaraia UPDATE suport urmtorii modificatori:
dac se folosete LOW_PRIORITY, execuia modificrii este ntrziat pn cnd
nici un alt client nu mai citete din tabel;
dac se folosete cuvntul cheie IGNORE, execuia declaraiei UPDATE nu va fi
oprit nici dac apar erori n timpul execuiei modificrii. Liniile pentru care
exist un conflict de cheie duplicat nu sunt updatate. Liniile ale cror coloane
(celule) sunt modificate la valori care provoac erori de conversie tip de date vor
fi modificate la cea mai apropiat valoare valid.
<?php
require_once('config.php');
$cerereSQL = "UPDATE `tbl_Formular1` SET nume='nume',
prenume='prenume' WHERE nume='Basesecu' ";
mysql_query($cerereSQL);
echo 'Am modificat valorile campurilor nume si prenume unde numele
este Basesecu in baza de date';
?>
Se va crea i salva un fiier update.php, n care
va fi scris sciptul de mai sus. Dac n tabel sunt mai
multe nregistrri pentru care Nume = Basesecu, vor fi
modificate toate nregistrrile:
106
Cap 5: Limbaje de programare i Tehnologii Web
USING table_references
[WHERE where_definition]
DELETE deletes
Comanda DELETE sterge linii din tabelul tbl_name care satisfac condiiile impuse
de where_definition, i returneaz un numr de nregistrri terse.
5.10. JavaScript
<html>
<head><script
language="Javascript">
<!
alert (" Apasati OK ! ")
-->
</script></head>
<body> O fereastra cu mesaj
!!! </body>
</html>
107
Tehnologii Internet
Cu Javascript pot fi gestionate o multitudine de evenimente cum ar fi cele
prezentate mai jos:
Tratearea
Eveniment Se desfasoara atunci cand
evenimentului
utilizatorul elimin controlul de intrare de pe un element al unui
blur onBlur
formular
utilizatorul execut un click pe un element al unui formular sau pe
click onClick
o legtur
utilizatorul modific valoarea unui text, zona de text sau element de
change onChange
selecie
focus utilizatorul atribuie unui element de formular control de intrare onFocus
load utilizatorul ncrca pagin n programul de navigare onLoad
utilizatorul deplaseaz indicatorul mouse-ului deasupra unei
mouseover onMouseover
legturi sau a unei ancore
utilizatorul selecteaz cmpul de intrare al unui element de
select onSelect
formular
submit utilizatorul transmite un formular onSubmit
unload utilizatorul abandoneaz pagina onUnload
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function Salutare(){
var name =
document.forms[0].elements[0].value;
alert("Salut "+name);}
-->
</SCRIPT>
</HEAD>
<BODY><br><br>
<p align=center>
<FORM NAME="form">
<b> Numele: <INPUT TYPE="text"
NAME="nume">
<INPUT TYPE="button"
VALUE="Scrie numele si apasa!"
onClick="Salutare()">
</FORM>
</BODY>
</HTML>
108
Cap 5: Limbaje de programare i Tehnologii Web
Exemplul 2: Se modific culoare de fond a paginii:
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function galben(){
document.bgColor="#FFFF00";
}
function albastru(){
document.bgColor="#0000FF";
}
function initial(){
document.bgColor="#FFFFFF";
}
-->
</SCRIPT>
</HEAD>
<BODY>
<CENTER>
<P>
<FORM>
<INPUT TYPE="button" VALUE="Fond galben"
onClick="galben()">
<br><br> <INPUT TYPE="button" VALUE="Fond albastru"
onClick="albastru()">
<br><br> <INPUT TYPE="button" VALUE="Fond initial"
onClick="initial()">
</FORM>
</P>
</CENTER>
</BODY>
</HTML>
109
Tehnologii Internet
var cal; // Used for printing
if(week_day != DAYS_OF_WEEK)
{
// SET VARIABLE INSIDE LOOP FOR INCREMENTING PURPOSES
var day = Calendar.getDate();
// HIGHLIGHT TODAY'S DATE
if( today==Calendar.getDate() )
cal += highlight_start + day + highlight_end + TD_end;
// PRINTS DAY
else
cal += TD_start + day + TD_end;
}
cal += '</TD></TR></TABLE></TABLE>';
// PRINT CALENDAR
document.write(cal);
// End -->
<!-- STEP TWO: Place this into the BODY of the HTML document where
you want the calendar -->
<!-- Make sure the '.js' and '.html' files are in the same directory.
-->
<BODY>
<SCRIPT SRC="calendar.js"></SCRIPT>
<!-- STEP ONE: Insert the onLoad event handler into your BODY tag -->
<BODY onLoad="clock()">
<!-- STEP TWO: Paste this code into the BODY of your HTML
document -->
111
Tehnologii Internet
<!-- Adjust the placement of the clock in the line below -->
<span id="pendule"
style="position:absolute;left:300;top:20;"></span>
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function clock() {
if (!document.layers && !document.all) return;
var digital = new Date();
var hours = digital.getHours();
var minutes = digital.getMinutes();
var seconds = digital.getSeconds();
var amOrPm = "AM";
if (hours > 11) amOrPm = "PM";
if (hours > 12) hours = hours - 12;
if (hours == 0) hours = 12;
if (minutes <= 9) minutes = "0" + minutes;
if (seconds <= 9) seconds = "0" + seconds;
dispTime = hours + ":" + minutes + ":" + seconds + " " + amOrPm;
if (document.layers) {
document.layers.pendule.document.write(dispTime);
document.layers.pendule.document.close();
}
else
if (document.all)
pendule.innerHTML = dispTime;
setTimeout("clock()", 1000);
}
// End -->
</script>
<!-- Script Size: 1.42 KB -->
112
6. Crearea paginilor web cu Dreamweaver
6.1. Generaliti
O aplicaie specializat pentru realizarea de pagini web ofer posibilitatea
realizrii rapide a unor pagini complexe. Dintre editoarele existente se detaeaz prin
profesionalismul cu care a fost realizat Dreamweaver produs de Adobe.
Dreamweaver permite crearea de pagini sau aplicaii pentru web coninnd toate
elementele prezentate. n Dreamweaver se pot crea uor stiluri sau fiiere .css
(Cascading Style Sheets), se poate vizualiza i testa pagina creat.
n Dreamweaver se poate crea un sit sau se poate edita un document singular.
La pornirea aplicaiei, aceasta afieaz coninutul unui fiier HTML minimal. n
partea dreapt a ferestrei sunt afiate un ansamblu de panouri care pot fi ascunse
folosind tasta F4.
113
Tehnologii Internet
114
Cap 6: Crearea paginilor web cu Dreamweaver
Fig. 6.5: Fereastra pentru alegerea directorului local n care va fi salvat situl
115
Tehnologii Internet
Se observ c situl poart numele Site 1. Directorul n care se vor pstra fiierele
sitului poart de regul acelai nume.
116
Cap 6: Crearea paginilor web cu Dreamweaver
Codificarea paginii se realizeaz folosind instrumentele de pe bara cu
instrumente Insert. Ea permite accesarea diferitelor categorii de marcaje HTML i a
marcajelor din fiecare categorie. Pentru fiecare marcaj inserat, dup selectarea acestuia,
aplicaia afieaz o fereastr n care sunt cerute n mod explicit valorile atributelor
specifice.
117
Tehnologii Internet
Verificarea modului n care va arta pagina ntr-o aplicaie de navigare se face
alegnd opiunea File -> Preview in Browser (sau apsnd tasta F12). Implicit este
selectat Internet Explorer, dar exist posibilitatea alegerii unui alt browser, selectnd
succesivFile -> Preview in Browser -> Edit Browser List.
119
Tehnologii Internet
dup care se va introduce ntr-o nou fereastr numele fiierului care va pstra
definiiile, sau se va selecta opiunea File -> Export -> CSS Styles , dup care se
precizeaz n fereastra care se afieaz
numele fiierului .css. De regul fiierele .css sunt pstrate tot n directorul care conine
paginile sitului.
Ataarea unui fiier .css la pagina curent se realizeaz prin apsarea butonului
.
Fig. 6.17: Fereastra pentru realizarea legturii ntre fiierul html i fiierul .css creat
120
Laborator Tehnologii Internet Lucrarea nr.1
1.1 Obiective
Instalarea i configurarea serverului Apache;
Instalarea i configurarea PHP;
Instalarea i configurarea serverului MySQL i a aplicaiei PhpMyAdmin
121
Laborator Tehnologii Internet Lucrarea nr.1
i MySQL Query Browser. Un alt instrument de management al acestor baze de date
este aplicaia gratuit, scris n PHP, phpMyAdmin.
MySQL poate fi rulat pe multe dintre platformele software existente: AIX,
FreeBSD, GNU/Linux, MacOS X, NetBSD, Solaris, SunOS, Windows
9x/NT/2000/XP/Vista.
1. Login n sistemul FreeBSD ca root, sau su - root pentru a intra n mediul super-
user
2. Introduce-i urmtoarele comenzi n modul CLI (command line interface) al
FreeBSD (Ateptai pn cnd fiecare comand i termin execuia nainte de a
tasta comanda urmtoare):
cd /usr/ports/databases/mysql50-server
make install clean
mysql_install_db
chown -R mysql /var/db/mysql/
chgrp -R mysql /var/db/mysql/
/usr/local/bin/mysqld_safe -user=mysql &
4. n mod implicit, superutilizatorul MySQL este root, care nu are setat nici o
parol (parol blank). Aadar este important atribuirea unei parole contului de
administrator, lucru care se face cu urmtoarele comenzi:
mysqladmin -u root password newpassword
nlocuii newpassword cu parola dorit (parola) este
obligatorie
7. Chiar dac nu este neaprat nevoie, pentru o mai mare siguran, dai restart
(reboot).
122
Laborator Tehnologii Internet Lucrarea nr.1
1.2.2 Instalarea phpMyAdmin (nu merge fr PHP)
n modul linie de comand, logat ca root, se dau urmtoarele comenzi. Se
ateapt terminarea execuiei comenzii curente, pentru a o da pe urmtoarea.
cd /usr/ports/databases/phpmyadmin
make
make install
ln -s /usr/local/www/phpMyAdmin
/usr/local/www/apache22/data/phpMyAdmin (creaz un link n directorul
data al localhost-ului)
cd /usr/local/www/data/phpMyAdmin
cp config.sample.inc.php config.inc.php
$cfg['Servers'][$i]['controluser'] = 'root';
$cfg['Servers'][$i]['controlpass'] = 'parola';
...
$cfg['ShowChgPassword'] = FALSE; // simple users or not
3. Pentru a porni serverul web Apache HTTP imediat, se folosete una din
comenzile:
/usr/local/sbin/apachectl start
sau
/usr/local/etc/rc.d/apache22.sh start
123
Laborator Tehnologii Internet Lucrarea nr.1
Sub sistemul de operare FreeBSD s-a optat pentru instalarea pachetului PHP5
din colecia de porturi (/usr/ports/lang/php5).
124
Laborator Tehnologii Internet Lucrarea nr.1
6. Dac apare vre-un mesaj prin care vi se cere s selectai unele opiuni de
configurare, le putei accepta pe cele implicite prin apsarea tastei Enter. Unele
module v pot ntreba pentru aciuni care includ php5-gd, php5-mbstring i
php5-sqlite.
9. Pornii serverul Apache HTTP folosind comanda apachectl start (sau restatai
Apache HTTP web server prin utilizarea comenzii apachectl restart). apachectl
125
Laborator Tehnologii Internet Lucrarea nr.1
este plasat n /usr/local/sbin, dac v apare mesajul Command not found
problem, ncercai s schimbai directorul ctre acea locaie, sau restartai
sistemul.
User www
Group www
</IfModule>
ServerAdmin admin@localhost.com
ServerName www.localhost.com:80
DocumentRoot "/usr/local/www/apache22/data"
...
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
...
Alias /phpmyadmin/ "/usr/local/www/phpMyAdmin/"
126
Laborator Tehnologii Internet Lucrarea nr.1
<Directory "/usr/local/www/phpMyAdmin/">
Options none
AllowOverride Limit
Order Deny,Allow
# Deny from all
Allow from all
</Directory>
127
Laborator Tehnologii Internet Lucrarea nr.1
128
Laborator Tehnologii Internet Lucrarea nr.1
129
Laborator Tehnologii Internet Lucrarea nr.1
Shell : /usr/sbin/nologin
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (ftp) to the user database.
Add another user? (yes/no): no
Goodbye!
130
Laborator Tehnologii Internet Lucrarea nr.2
131
Laborator Tehnologii Internet Lucrarea nr.2
ATENIE: Dac fiierele HTML pot fi deschise cu un navigator Web oriunde
s-ar afla ele, scripturile PHP trebuie apelate scriind adresa
http://localhost.numefiier.php deoarece scriptul PHP este interpretat de serverul Web
(Apache) i rezultatul interpretrii este trimis bowserului, acesta netiind s interpreteze
PHP aa cum o face cu HTML. De asemenea, scripturile php trebuie amplasate n
directorul C:\Program Files\EasyPHP 2.0b1\www, mai sus menionat.
132
Laborator Tehnologii Internet Lucrarea nr.2
2.3 Instalarea aplicaiei PhpMyAdmin
Pentru a administra baza de date MySQL vom folosi aplicaia phpMyAdmin,
care poate fi descrcat de aici: http://www.phpmyadmin.net/home_page/index.php.
Aceasta este o colecie de scripturi php care ajut la gestionarea bazei de date prin
intermediul unei interfee Web. Arhiva descrcat de mai sus va fi dezarhivat n
directorul C:\Program Files\EasyPHP 2.0b1\www\phpMyAdmin. Pentru a lansa n
execuie aplicaia de administrare a bazei de date se deschide navigatorul web iar n url
se tasteaz: http://localhost/phpmyadmin/ aprnd fereastra de autentificare :
n mod implicit, parola pentru root este nesetat (vid), iar la apsarea butonului
Execut se ncarc pagina urmtoare:
Apoi dup ce s-a ncrcat urmtoarea pagin, gsii unde apare Schimbare
parola i bifai Parola, apoi tastai parola dorit de dumneavoastr i n prima, i n
a-II-a csu, dup care apsai pe butonul Executa. Dup setarea parolei de root, mai
apare un cont de utilizator "Oricare", fr parole i cu privilegii reduse.
OBS: n cadrul laboratorului, pentru aplicaiile instalate de studeni, parola de
root va fi parola.
134
Laborator Tehnologii Internet Lucrarea nr.2
script html: Explicaii:
<html > - nceput document html
<head> - nceput antet,
<title>Document Nou</title> - titlul documentului
</head>
- sfrit antet document
<body>
Prima pagina web in HTML!! - nceputul corpului documentului (paginii web)
</body> - coninutul paginii
</html> - sfritul corpului documentului (paginii web)
- sfritul documentului html.
Corpul documentului
Rezultat:
Salvm fiierul sub numele info.php n directorul mai sus menionat, iar la
adresa browserului web introducem: localhost/info.php . n pagina web ar trebui s
apar informaii despre serverul PHP, Apache i MySQL instalate pe sistem.
Dac nu apare nimic, nseamn c serverul php nu este instalat corect sau fiierul
nu este salvat n directorul: C:\Program Files\EasyPHP 2.0b1\www
135
Laborator Tehnologii Internet Lucrarea nr.2
136
Laborator Tehnologii Internet Lucrarea nr.3
3.2 Introducere
Orice document HTML ncepe cu notaia <html> i se termin cu notaia
</html>. Aceste "chestii" se numesc n literatura de specialitate "TAG-uri".Prin
convenie, toate informaiile HTML ncep cu o parantez unghiular deschisa "<" i se
termin cu o parantez unghiular nchis ">".
Tag-urile dintre aceste paranteze transmit comenzi ctre browser pentru a afia
pagina ntr-un anumit mod. Unele blocuri prezint delimitator de sfrit de bloc, n timp
ce pentru alte blocuri acest delimitator este opional sau chiar interzis.
ntre cele dou marcaje <html> i </html> vom introduce dou seciuni:
seciunea de antet <head>...</head> i
corpul documentului <body>...</body>. Blocul <body>...</body> cuprinde
coninutul propriu-zis al paginii HTML, adic ceea ce va fi afiat n fereastra
browser-ului.
137
Laborator Tehnologii Internet Lucrarea nr.3
Bine ati venit in pagina mea de Web!
</body>
</html>
138
Laborator Tehnologii Internet Lucrarea nr.3
O etichet poate avea mai multe atribute. De exemplu, o etichet cu trei atribute
arata astfel: <eticheta atribut1 = valoare1 atribut2 = valoare2 atribut3 =
valoare3>. Urmtorul exemplu prezint o pagin cu fondul de culoare albastr i textul
de culoare galben.
<html>
<head>
<title>atribute multiple </title>
</head>
<body bgcolor=blue text=yellow>
Fond de culoare albastra si text de culoare galbena.
</body>
</html>
139
Laborator Tehnologii Internet Lucrarea nr.3
141
Laborator Tehnologii Internet Lucrarea nr.3
<html>
<head>
<title>Imbricarea etichetelor </title>
</head>
<body> Aceasta linie este formata din text normal.<br>
Normal <b>ingrosat <i> ingrosat si italic </i> ingrosat </b>.
<br> Normal <u>subliniat <b> subliniat si ingrosat <big>subliniat,
ingrosat si marit.<br>
<i>Subliniat, ingrosat ,marit si italic.</i> </big></b></u>
</body>
</html>
142
Laborator Tehnologii Internet Lucrarea nr.4
4.2 Recapitulare
Orice document HTML ncepe cu notaia <html> i se termin cu notaia
</html>. Aceste "chestii" se numesc n literatura de specialitate "TAG-uri".Prin
convenie, toate informaiile HTML ncep cu o parantez unghiular deschisa "<" i se
termin cu o parantez unghiular nchis ">".
Tag-urile dintre aceste paranteze transmit comenzi ctre browser pentru a afia
pagina ntr-un anumit mod. Unele blocuri prezint delimitator de sfrit de bloc, n timp
ce pentru alte blocuri acest delimitator este opional sau chiar interzis.
ntre cele dou marcaje <html> i </html> vom introduce dou seciuni:
seciunea de antet <head>...</head> i
corpul documentului <body>...</body>. Blocul <body>...</body> cuprinde
coninutul propriu-zis al paginii HTML, adic ceea ce va fi afiat n fereastra
browser-ului.
143
Laborator Tehnologii Internet Lucrarea nr.4
<font color=red><h3>Lucrarea de laborator nr 4 <br> pagina
1</h3></font>
</body>
</html>
<html >
<head>
<title>Pagina 2</title>
</head>
<body>
<font color=blue><h3>Lucrarea de laborator nr 4 <br> pagina
2</h3></font>
</body>
</html>
4.3.1 Ancore
ntr-o pagin foarte lung pot exista puncte de reper ctre care se definesc
legturi.
O ancor se definete de asemenea prin eticheta <a>. Pentru a defini ancora se
utilizeaz atributul name care primete ca valoare un nume atribuit ancorei (de exemplu
"leg1").
Pentru a insera o legtura ctre "leg1" definit n aceeai pagin se utilizeaz
eticheta <a> avnd atributul href de valoare "#leg1".
Pentru a introduce o legtur ctre o ancor definita n alt document (alta
pagin) aflat n acelai director, atributul href primete o valoare de forma
"nume_fisier.html#nume_ancora".
Vom defini o ancor n top-ul paginii i una la sfritul paginii astfel:
n topul paginii, dup tag-ul <body> se scrie: <a name="top">top
n josul paginii: nainte de </body> se scrie: <a name="jos">jos
Pentru apelarea ancorelor, scriem n continure, de unde am rmas data trecut:
144
Laborator Tehnologii Internet Lucrarea nr.4
<h3>Ancore definite in acelasi document </h3>
<a href="#jos">
Link catre sfarsit pagina</a>
4.4 Liste
Listele ordonate pot fi imbricate ntre ele sau cu liste neordonate, ca n exemplul
urmtor.
<html>
<head><title>listex_8</title></head>
<body><h1 align="center">O lista ordonata de liste ordonate si
neordonate</h1><hr>
<ol>Un sistem informatic include:
<li>Hardware:
<ol>
<li>placa de baza
<li>procesor
<li>memorie
<li>harddisk
</ol>
<li>Software:
<ul>
<li>Linux
<li>Windows
<li>OS/2
<li>Unix
</ul>
<li>Software de aplicatie:
<ul type="disc">
<li>VisualC++
<li>Java
<li>SQL
<li>CorelDraw
</ul>
</ol>
</body>
</html>
4.5 Tabele
Tabelele ne permit s crem o reea dreptunghiular de domenii, fiecare domeniu
avnd propriile opiuni pentru culoarea fondului, culoarea textului, alinierea textului etc.
Pentru a insera un tabel se folosesc etichetele corespondente <table>...</table>. Un
tabel este format din rnduri. Pentru a insera un rnd ntr-un tabel se folosesc etichetele
<tr>...</tr> (de la " table row "= rnd de tabel). Folosirea etichetei de sfrit </tr> este
opional.
Un rnd este format din mai multe celule ce conin date. O celul de date se
introduce cu eticheta <td>..</td>.
146
Laborator Tehnologii Internet Lucrarea nr.4
Toate exemplele de tabele vor fi scrise n fiierul pagina2.html.
n mod implicit, un tabel nu are chenar. Pentru a aduga un chenar unui tabel, se
utilizeaz un atribut al etichetei <tabel> numit border.
Acest atribut poate primi ca valoare orice numr ntreg ( inclusiv 0 ) i reprezint
grosimea n pixeli a chenarului tabelului.
Dac atributul border nu este urmat de o valoare atunci tabelul va avea o
grosime prestabilita egal cu 1 pixel, o valoare egal cu 0 a grosimii semnific absena
chenarului.
Cnd atributul border are o valoare nenul chenarul unui tabel are un aspect
tridimensional.
Exemplu: tabel cu trei rnduri i patru coloane:
<table border="3">
<tr> <td>celula 11</td> <td>celula 12</td><td>celula 13</td></tr>
<tr> <td>celula 21</td> <td>celula 22</td><td>celula 23</td></tr>
<tr> <td>celula 31</td> <td>celula 32</td><td>celula 33</td></tr>
</table>
147
Laborator Tehnologii Internet Lucrarea nr.4
Exemplificare cod:
fond galben pentru tot tabelul:
<table align="center" border="3" bgcolor="yellow">
Caracterul (no break space) este de fapt caracterul spaiu. Un spaiu
introdus prin intermediul acestui caracter nu va fi ignorat de browser.
149
Laborator Tehnologii Internet Lucrarea nr.5
5.2 Introducere
PHP este un limbaj dinamic, ceea ce nseamn c PHP comunic cu utilizatorul,
el efectueaz dinamic operaii, iar coninutul paginii se schimb n real-time, n funcie
de preferine. De exemplu n HTML nu putem modifica coninutul unei pagini dect
dac o nlocuim cu una nou (cu coninut nou). n PHP lucrurile stau mai simplu, printr-
un script putem introduce tiri pe pagina noastr sau putem modifica titlul paginii, sau
putem construi formulare dinamice pe care utilizatorii s le foloseasc. Totui acest
lucru nu nseamn c ne debarasam de limbajul HTML, nicidecum. Cei care au
cunotine HTML vor nelege i nva mai uor PHP.
5.2.1 Sintaxa
La fel ca i n limbajul HTML, atunci cnd deschidem un tag, el trebuie automat
nchis, pentru a nu genera erori (ex. <table> i </table>), i n PHP, cu ajutorul
tagurilor <?php i respectiv ?> vom putea delimita codul PHP de codul HTML. Este
foarte important de tiut, pentru lejeritate se pot folosi mai simplu tagurile <? i
respectiv ?>, cu toate acestea metodele prin care putem delimita tagurile PHP sunt mai
multe, spre exemplu:
<script language="php">
echo "Acesta este un text";
</script>
sau
<% echo "Acesta este un text"; %>
atunci cnd este activat opiunea asp_tags din php.ini.
?>
Ca n orice limbaj de programare/scripting, n PHP exist posibilitatea adugrii
de comentarii sau note n codul surs. Acestea nu sunt luate n considerare de ctre
compilator. Iat cteva exemple de comentarii acceptate n PHP:
/* Comentariu in stil C */
// Comentariu in stil C++
# Comentariu in stil Bourne shell
Prima linie este comentariu i este ignorat de PHP, a doua linie reprezint o
declaraie care se ncheie bineneles cu ;.
151
Laborator Tehnologii Internet Lucrarea nr.5
<?php
echo(Salut<br>);
echo(Numele meu este<br>);
echo(Popescu Ion);
?>
152
Laborator Tehnologii Internet Lucrarea nr.5
<?php
$salut=Salutare natiune;
echo($salut);
?>
Coninutul variabilei $salut este pasat funcie echo care va afia coninutul
acesteia, deci va rezulta textul Salutare natiune.
Urmtorul cod demonstreaz conceptul de variabil ncapsulat. n cazul de mai
jos este vorba despre o variabil ncapsulat ntr-un text:
<?php
$nume = Popescu Ion;
echo(Numele meu este $nume);
//folosim functia echo() pentru a afisa
textul
?>
Rulai n browser scriptul de mai sus i vei vedea c el afieaz textul Numele
meu este Popescu Ion.
Probabil v-ai dat seama pn acum de ce se lucreaz cu variabile. Pentru c ne
fac viaa de programator mai uoar, unei variabile i putem asigna orice valoare, orice
text orict ar fi el de mare, i pe care l putem manipula doar prin apelarea unei simple
variabile asignate.
<?php
$numarul1 = 25;
$numarul2 = 20;
$numarul1 + $numarul2 = $rezultat;
echo($rezultat);
?>
n codul de mai sus am declarat dou variabile $numarul1 i $numarul2,
crora le-am dat valorile 25, respectiv 20. Mai jos am efectuat operaia simpl de
adunare, al crei rezultat este coninut de variabila $rezultat. Pentru a afia aceast
valoare ne folosim de funcia echo(). Rezultatul este clar, pe ecran va fi afiat, numrul
45 (20+25=45).
Pe lng operaia de adunare (+) se mai pot efectua opera urmtoarele operaii
matematice: (-) scdere, (*) nmulire, (/) mprire, (%) modul.
Tipurile de date n PHP sunt urmtoarele:
array-uri;
numere de tip float sau double;
integer;
object;
string
153
Laborator Tehnologii Internet Lucrarea nr.5
<?php
$variabila_mea=Salut, sunt o variabila;
$tip=gettype($variabila_mea);
echo(Aceasta este o variabila de tip $tip);
?>
Mai sus am creat o variabil numit $variabila_mea creia i-am dat valoarea
Salut, sunt o variabila. Apoi prin funcia gettype() am chemat aceast variabil pentru
a afla ce fel de tip este ea. Mai jos am utilizat echo() pentru a afia tipul variabilei. Pe
ecran se va afia, Aceasta variabila este de tip string.
Facei un test si pentru $variabila_mea=6
Cu alte cuvinte, mai sus am creat o variabila cu numele $salutare i i-am dat
valoarea lume. Ne putem juca cu variabile dinamice la infinit, dar atunci cnd s-a
ajuns la un nivel mare deja se creaz confuzii iar dac cineva ar dori s citeasc, pentru
a mbunti, codul scris de tine, atunci nu ar mai nelege nimic.
Exist o sintax special care se folosete pentru variabilele complexe, i anume,
ncadrarea ntre acolade {}:
echo "Salutare ${$variabila}"; // rezulta: Salutare lume
Codul de mai sus ilustreaz foarte bine colaborarea dintre PHP i HTML. Codul
PHP poate fi asimilat cu uurin de tagurile HTML att timp ct el se afl ntre
delimitrile <?php respectiv ?>.
De asemenea se pot introduce mai multe declaraii ntre tagurile html, n diferite
moduri:
<html> ......... <body>
<?php
echo (Salut);
echo (Ce mai faci?);
?>
</body> ......... </html>
sau
154
Laborator Tehnologii Internet Lucrarea nr.5
Fiierele de tip PHP pot include cod html, fie c face parte din ele, fie c este
scris separat. Privii urmtorul cod:
<?php
$titlu = Pagina mea de web;
include(index.inc);
?>
Iar codul lui index.inc este urmtorul:
<html><head><title><?php echo $titlu; ?></titlu></head></html>
1
Un fiier .htaccess este un simplu fiier text ce conine comenzi, denumite directive Apache. Aceste
directive se aplic i afecteaz fiierele din directorul n care se afl fiierul .htaccess precum i
subdirectoarelor acelui director.
155
Laborator Tehnologii Internet Lucrarea nr.6
6.2 Introducere
n continuare se prezint o modalitate de cum se poate construi un site cu
ajutorul limbajului PHP. Exemplul prezentat nu este un standard, este doar o modalitate
de a vedea cum se poate construi un site i cum se preiau sau trimite variabilele prin
intermediul site-ului. Putei, pe baza acestui exemplu, s v construii propriul site, n
forma preferat de dvs. i adaptnd modelul acesta la necesitile voastre.
n exemplul prezentat, s-a preferat existena unei singure pagini, anume index.php, n
care s fie incluse coninutul i meniul, n funcie de ce link acceseaz vizitatorul.
Putei vedea acest model ntr-un fel modular, fiecare script fiind de fapt un
modul care execut anumite operaii specifice. Astfel, n pagina index.php se includ
mai multe module (scripturi) care luate separat, fiecare fac anumite lucruri, dar puse
mpreun, formeaz pagina de web generat dinamic.
Dup cum se poate vedea mai sus, am desprit fiecare parte a unei pagini n
buci, fiecare bucat este colorat diferit pentru o mai bun vizualizare. Putei
introduce n fiecare bucat cte un script php care s genereze respectiva bucat
dinamic. Astfel, n cazul unei modificri, va fi mult mai uor s modificai doar scriptul
care se ocup de o anumit parte a paginii, pe cnd dac tot site-ul ar fi fost fcut static
n HTML, la un site cu 100200 de pagini chiar i cea mai mic modificare ar fi
nsemnat un chin.
156
Laborator Tehnologii Internet Lucrarea nr.6
6.3 Elementele componente
6.3.1 index
index.php - n care se seteaz nivelul de raportare al erorilor (dac nu dorii ca
vizitatorii s vad eventualele erori raportate de ctre php, putei stabili nivelul 0). Apoi,
se verific dac exist fiierul head.php i body.php i se ncarc sau se oprete cu un
mesaj de eroare.
Scriptul acestui fiier este:
<?php
/***************************
modulul index.php
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
**************************/
// se seteaza nivelul de raportare al erorilor din php
error_reporting(E_ALL);
6.3.2 head
head.php - n acest fiier se afieaz codul html pentru nceputul paginii, i dac
exist, se ncarc i fiierele cu cod CSS i JavaScript folosite n pagin.
<?php
/***************************
modulul head.php
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
**************************/
// se trimite la browser codul html
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
157
Laborator Tehnologii Internet Lucrarea nr.6
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-
1" />';
css.php - acest fiier conine codul CSS folosit pentru formatarea i afiarea
paginii HTML.
<?php
/***************************
modulul css.php
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
158
Laborator Tehnologii Internet Lucrarea nr.6
**************************/
// se seteaza variabila care contine codul css
$valoare_css = '<style type="text/css">
<!--
body,td,th {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #000000;
}
body {
background-color: #FFFFFF;
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
.style1 {
font-size: 24px;
font-weight: bold;
}
-->
</style>';
// se trimite la browser codul css
echo $valoare_css;
?>
6.3.3 body
body.php - conine codul HTML existent ntre tagurile <body> i </body> Dac
exist, se ncarc i fiierele care conin meniul orizontal i/sau vertical, precum i
fiierul care afieaz coninutul paginii cerute. Pe lng acestea, dac dorii s bgai
alte scripturi n pagini, se include i fiierul module.php
<?php
</table></td>
</tr>
<tr>
<td valign="top">';
160
Laborator Tehnologii Internet Lucrarea nr.6
</table>';
?>
6.3.5 Coninut
continut.php - afieaz coninutul paginilor, n funcie de linkul cerut. Dac se
cer pagini externe, se verific dac acea pagin exist i se ncarc pentru afiare.
<?php
/***************************
modulul continut.php
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
**************************/
// se verifica daca se cere o pagina
161
Laborator Tehnologii Internet Lucrarea nr.6
if (isset($_GET['pagina']))
{
// daca se cere o pagina se verifica daca variabila nu este goala
if(!empty($_GET['pagina']))
{
$pagina = $_GET['pagina'];
}
// daca este goala se ia pagina principala
else
{
$pagina = 'index';
}
}
/* daca nu se cere nici o pagina nseamn ca trebuie afiata pagina
principala */
else
{
$pagina = 'index';
}
162
Laborator Tehnologii Internet Lucrarea nr.6
<p>Aceasta este pagina de contact. Este o pagin; separat; i se gsete n
fiierul <em>contact.php</em></p>
<p>Se pot folosii fiiere separate n php pentru diferite pagini, precum i
formulare i alte scripturi. </p>
6.3.6 Module
module.php - este un fiier care atunci cnd este accesat, verific ce fiiere
exist n directorul MODULE i le ncarc pe fiecare.
<?php
/***************************
modulul module.php
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
**************************/
// se verifica ce module sunt in directorul de module
if (!$director = opendir("module"))
{
echo("Eroare: Nu exista directorul cu module");
}
else
{
$citire = readdir($director);
while ($citire)
{
if ($citire != '.')
{
if ($citire != '..')
{
$fisier[] = $citire;
}
}
$citire = readdir($director);
}
closedir($director);
}
// se incarca fiecare modul existent in director
foreach ($fisier as $valoare)
{
if (file_exists("module/".$valoare))
{
include_once("module/".$valoare);
}
else
{
echo "<br>module/".$valoare;
}
}
?>
163
Laborator Tehnologii Internet Lucrarea nr.6
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
**************************/
// se preiau data si ora serverului
$data = date("d-m-Y", time());
$ora = date("H:i:s", time());
// se preia ip-ul vizitatorului
$ip = $_SERVER['REMOTE_ADDR'];
// se preia semnatura browserului
$browser = $_SERVER['HTTP_USER_AGENT'];
<?php
/***************************
modulul module.php
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
**************************/
// se verifica ce module sunt in directorul de module
if (!$director = opendir("module"))
{
echo("Eroare: Nu exista directorul cu module");
}
else
{
$citire = readdir($director);
while ($citire)
{
if ($citire != '.')
{
if ($citire != '..')
{
$fisier[] = $citire;
}
}
$citire = readdir($director);
}
closedir($director);
}
// se incarca fiecare modul existent in director
foreach ($fisier as $valoare)
{
164
Laborator Tehnologii Internet Lucrarea nr.6
if (file_exists("module/".$valoare))
{
include_once("module/".$valoare);
}
else
{
echo "<br>module/".$valoare;
}
}
?>
165
Laborator Tehnologii Internet Lucrarea nr.7
167
Laborator Tehnologii Internet Lucrarea nr.7
7.3 Crearea chestionarelor n php
De multe ori este nevoie pe un stie de un chestionar prin care vizitatorii s poat
vota sau prin care s i poat exprima punctul de vedere. De aceea n continuare se
prezint un chestionar pe care cred c i voi vrei s l avei pe paginile voastre.
El este compus din 2 fiiere: chestionarul n format html i modulul de
prelucrare i trimitere a datelor din chestionar (un script php). Putei s adugai sau s
tergei ntrebri, s punei alte butoane (specifice html - text field, check box, radio
button, etc) i s l modificai aa cum dorii.
Explicaii:
n modulul chestionar.php avei grij s introducei datele i check box-urile
doar n form altfel pot aprea probleme la afiarea sau trimiterea datelor. Tot n
chestionar, dac mai adugai ntrebri trebuie s specificai numele butonului ca fiind
8-9-10 sau alt nume (vezi <input name = "1" type = "checkbox" id = "1"
value="da">). n situaia de fa eu le-am numerotat i la valoarea am pus "da" (adic
dac e bifat apare ca "da"). Dac avei i un text field (cum este la <textarea name="8"
id="8"> scrie aici ce vrei s gseti sau poi s ntrebi pe forum. </textarea>) trebuie
s i punei i lui un nume (n cazul de fa numele este "8"). Dup completarea i
trimiterea chestionarului ctre server, se acceseaz fiierul prelucrare_chest.php care
verific datele introduse i dac sunt corecte le afieaz i le trimite pe e-mail la adresa
specificat. Putei s introducei datele din chestionar i ntr-o baz de date sau ntr-un
fiier text, adugnd doar cteva linii de cod.
Mod de lucru: Fiecare student va crea un director propriu (de ex:
chestionar_iniiale-student) n C:\Program Files\EasyPHP 2.0b1\www, n care se vor
scrie cele trei fiiere listate mai jos: index.php, chestionar.php i
prelucrare_chestionar.php.
index.php
<html>
<head>
<title>Formular Chestionar</title>
</head>
<body>
<table width="100%" border="1">
<tr>
<td width="30%" valign="top">
<?php
include ("chestionar.php");
?>
</td>
<td><div align="center"> Completai chestionarul alturat, i dup
verificare, apsai TRIMITE. Dac nu sunei siguri, apsai ANULARE
</div></td>
</tr>
</table>
</body>
</html>
chestionar.html
<style type="text/css">
<!--
.style1 {
168
Laborator Tehnologii Internet Lucrarea nr.7
color: #FFFFFF;
font-weight: bold;
}
-->
</style>
<!-
Chestionar varianta 1
Creat la data de 08-01-2004
Copyright Alex - http://www.tutoriale.far-php.ro
->
<table width="100%" border="1" cellpadding="0" cellspacing="0"
bordercolor="#000099">
<tr>
<td valign="top" bgcolor="#9999cc"><div align="center"
class="style1 style1">Ce doriti sa gasiti<br>
in acest site? </div></td>
</tr>
<tr>
<td valign="top"><form action="prelucrare_chest.php"
method="post" name="chestionar" id="chestionar">
<input name="1" type="checkbox" id="1" value="da">
Scripturi php freeware.<br>
<input name="2" type="checkbox" id="2" value="da">
Mai multe articole despre php.<br>
<input name="3" type="checkbox" id="3" value="da">
Mai multe detalii despre comenzi.<br>
<input name="4" type="checkbox" id="4" value="da">
Mai multe despre MySQL.<br>
<input name="5" type="checkbox" id="5" value="da">
Mai multe despre baze de date.<br>
<input name="6" type="checkbox" id="6" value="da">
Mai multe despre baze de date in format txt.<br>
<input name="7" type="checkbox" id="7" value="da">
Altceva - si anume:<br>
<textarea name="8" id="8">scrie aici ce vrei sa gasesti sau
poti sa intrebi pe forum.</textarea>
<br><br>
<div align="left"><input type="reset" value="sterge"> <input
type="submit" value="expedieaza"> </div>
</form></td>
</tr>
</table>
prelucrare_chestionar.php
<html>
<head>
<title>Untitled Document</title>
/* Modul Prelucrare chestionar varianta 1 Creat la data de 08-01-2004
Copyright Alex - http://www.tutoriale.far-php.ro */
</head>
<body>
<?php
// Scripturi php freeware
$a=$_POST[1];
if ($a == "") {
$a = "nu";
}
169
Laborator Tehnologii Internet Lucrarea nr.7
// Mai multe articole despre php
$b=$_POST[2];
if ($b == "") {
$b = "nu";
}
// Mai multe detalii despre comenzi
$c=$_POST[3];
if ($c == "") {
$c = "nu";
}
// Mai multe despre MySQL
$d=$_POST[4];
if ($d == "") {
$d = "nu";
}
// Mai multe despre baze de date
$e=$_POST[5];
if ($e == "") {
$e = "nu";
}
// Mai multe despre baze de date in format txt
$f=$_POST[6];
if ($f == "") {
$f = "nu";
}
// Altceva - si anume:
$g=$_POST[7];
if ($g == "") {
$g = "nu";
}
// comentarii
$h=$_POST[8];
// in cazul in care campul 8 este gol sau scrie mesajul
pus initial atunci seteaza variabila ca "nu"
// altfel ea ramane asa cum este cu textul trimis de
utilizator
if (($h == "") or ($h == "scrie aici ce vrei sa gasesti
sau poti sa intrebi pe forum.")) {
$h = "nu";
}
// chestii utile
$browser = $_SERVER["HTTP_USER_AGENT"];
$timp = time ();
$ip = getenv ( "REMOTE_ADDR" );
$ip_name = gethostbyaddr ( $ip );
// diferenta de timp - in cazul in care ora de pe
server nu e corect setata
$hourdiff = "0";
$timeadjust = ($hourdiff * 60 * 60);
// cu - $timeadjust daca e in scadere sau cu +
$timeadjust daca trebuie sa creasca
$servdate = date("d-m-Y - H:m:s",time() -
$timeadjust);
// echo $servdate;
170
Laborator Tehnologii Internet Lucrarea nr.7
Campurile completate sunt:\n\n
$a - Scripturi php freeware.\n
$b - Mai multe articole despre php.\n
$c - Mai multe detalii despre comenzi.\n
$d - Mai multe despre MySQL.\n
$e - Mai multe despre baze de date.\n
$f - Mai multe despre baze de date in format txt.\n
$g - Altceva - si anume:\n
$h - Comentarii.\n\n
Mesajul a fost trimis la data de $servdate \n
Browser: $browser , host: $ip_name , ip: $ip \n
";
// ATENTIE!!! schimbati adresa de email cu adresa
voastra.
mail("antonpan2003@yahoo.com", "Mesaj de pe site",
"$continut", "$headers");
// afisare informatii
echo "<br><br>";
echo "Chestionarul completat de dvs. a fost trimis cu
informatiile de mai jos:<br><br>
$a - Scripturi php freeware.<br>\n
$b - Mai multe articole despre php.<br>\n
$c - Mai multe detalii despre comenzi.<br>\n
$d - Mai multe despre MySQL.<br>\n
$e - Mai multe despre baze de date.<br>\n
$f - Mai multe despre baze de date in format
txt.<br>\n
$g - Altceva - si anume:<br>\n
$h - Comentarii.<br><br>\n\n
Mesajul a fost trimis la data de $servdate <br>\n
Browser: $browser , host: $ip_name , ip: $ip <br>\n
";
echo "<br><br>";
echo "Va multumesc pentru informatii";
?>
</body>
</html
171
Laborator Tehnologii Internet Lucrarea nr.8
172
Laborator Tehnologii Internet Lucrarea nr.8
n continuare, se creeaz fiierul index.php, n care se introduce
urmtorul script:
<?php
require_once('config.php');
if(!isset($_SESSION['nume'])) $_SESSION['nume'] = '';
if(!isset($_SESSION['prenume'])) $_SESSION['prenume'] = '';
if(!isset($_SESSION['varsta'])) $_SESSION['varsta'] = '';
if(!isset($_SESSION['e-mail'])) $_SESSION['e-mail'] = '';
if(!isset($_SESSION['observatii'])) $_SESSION['observatii'] = '';
echo '<table width="310" border="0" cellpadding="0" cellspacing="0">
<form name="formular" action="validare.php" method="post">
<tr>
<td height="36" colspan="3" valign="top"><h2>Formular</h2>Comentariul
nu trebuie sa
fie mai lung de 255 caractere.</td>
<td width="1"></td>
</tr>
<tr>
<td width="80" height="19" valign="top"> </td>
<td width="15" rowspan="10" valign="top"> </td>
<td width="214" valign="top"> </td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Nume:</td>
<td valign="top">
<input type="text" name="nume" value="'.$_SESSION['nume'].'"> </td>
<td></td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Prenume:</td>
<td valign="top"><input type="text" name="prenume"
value="'.$_SESSION['prenume'].'"></td>
<td></td>
</tr>
<tr>
<td height="9"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Varsta:</td>
<td valign="top"><input type="text" size="3" maxLength="3"
name="varsta"
value="'.$_SESSION['varsta'].'"> ani</td>
<td></td>
</tr>
<tr>
<td height="10"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Email:</td>
173
Laborator Tehnologii Internet Lucrarea nr.8
<td valign="top"><input type="text" name="e-mail"
value="'.$_SESSION['e-mail'].'"></td>
<td></td>
</tr>
<tr>
<td height="9"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="19" align="right" valign="top">Observatii:</td>
<td rowspan="2" valign="top"><textarea name="observatii" cols="30"
rows="5"
value="'.$_SESSION['observatii'].'">'.$_SESSION['observatii'].'</texta
rea></td>
<td></td>
</tr>
<tr>
<td colspan="2" rowspan="3" valign="top"> </td>
<td height="83"></td>
</tr>
<tr>
<td height="17" valign="top">
</td>
<td></td>
</tr>
<tr>
<td height="24"
valign="top"><input
name="Trimite" type="submit"
id="Trimite"
value="Trimite">
<input name="Reseteaza"
type="reset" id="Reseteaza"
value="Reseteaza"> </td>
<td></td>
</tr>
</form>
</table>';
?>
Rezultatul ar trebui s arate aa:
174
Laborator Tehnologii Internet Lucrarea nr.8
Acum c am realizat formularul, trebuie s i prelucrm datele prin $_POST i
s verificm coninutul acestora, apoi s l introducem n baza de date.
Se realizeaz un fiier cu numele validare.php i introducem codul de mai jos,
apoi testm n browser, se introduc date n formular i se apas butonul Trimite.
<?php
require_once('config.php');
$_SESSION['nume'] = $_POST['nume'];
$_SESSION['prenume'] = $_POST['prenume'];
$_SESSION['varsta'] = $_POST['varsta'];
$_SESSION['e-mail'] = $_POST['e-mail'];
$_SESSION['observatii'] = $_POST['observatii'];
echo 'Nume: '.$_SESSION['nume'].'<br>
Prenume: '.$_SESSION['prenume'].'<br>
Varsta: '.$_SESSION['varsta'].'<br>
Email: '.$_SESSION['e-mail'].'<br>
Comentariu: '.$_SESSION['observatii'].'<br><br>
Daca datele sunt corecte, apasati <a href="prelucrare.php">aici</a>
pentru a le valida
<br> si a le introduce in baza de date.';
?>
175
Laborator Tehnologii Internet Lucrarea nr.8
Pentru vizualizare apasati <a href="vizualizare.php">aici</a>.';
$cerereSQL = "INSERT INTO `intrari` (`nume`, `prenume`, `varsta`, `e-
mail`,`observatii`)
VALUES ('".$_SESSION['nume']."', '".$_SESSION['prenume']."',
'".$_SESSION['varsta']."', '".$_SESSION['e-mail']."',
'".$_SESSION['observatii']."');";
mysql_query($cerereSQL);
$_SESSION['nume'] = '';
$_SESSION['prenume'] = '';
$_SESSION['varsta'] = '';
$_SESSION['e-mail'] = '';
$_SESSION['observatii'] = '';
}
?>
Dup ce ai testat n browser i ai trecut toi paii din formular, accesai
phpMyAdmin i vizualizai datele introduse n baza de date.
176
Laborator Tehnologii Internet Lucrarea nr.8
Acest fiier va fi accesat astfel: http://localhost/formular/vizualizare.php
Se vor introduce mai multe nregistrri n baza de date, apelnd de fiecare dat
http://localhost/formular/index.php, i apoi se acceseaz
http://localhost/formular/vizualizare.php pentru a vedea rezultatele
177
Laborator Tehnologii Internet Lucrarea nr.9
178
Laborator Tehnologii Internet Lucrarea nr.9
<?php
require_once('config.php');
if(!isset($_GET['actiune']))
$_GET['actiune'] = '';
if(!isset($_SESSION['user']))
$_SESSION['user'] = '';
if(!isset($_SESSION['parola1'])) $_SESSION['parola1'] = '';
if(!isset($_SESSION['parola2'])) $_SESSION['parola2'] = '';
if(!isset($_SESSION['nume'])) $_SESSION['nume'] = '';
if(!isset($_SESSION['prenume'])) $_SESSION['prenume'] = '';
if(!isset($_SESSION['varsta'])) $_SESSION['varsta'] = '';
if(!isset($_SESSION['localitate'])) $_SESSION['localitate'] = '';
switch($_GET['actiune'])
{
case '':
echo '<table width="309" border="0" cellpadding="0" cellspacing="0">
<form name="formular" action="inregistrare.php?actiune=validare"
method="post">
<tr>
<td height="36" colspan="4" valign="top"><h1>Formular inregistrare
</h1></td>
</tr>
<tr>
<td width="80" height="19" valign="top"> </td>
<td width="15" rowspan="5" valign="top"></td>
<td width="144" valign="top"> </td>
<td width="70" valign="top"> </td>
</tr>
<tr>
<td height="22" align="right" valign="top">Utilizator:</td>
<td colspan="2" valign="top">
<input type="text" name="user" value="'.$_SESSION['user'].'">
</td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Parola:</td>
179
Laborator Tehnologii Internet Lucrarea nr.9
<td colspan="2" valign="top"><input type="password" name="parola1"
value="'.$_SESSION['parola1'].'"></td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="38" align="right" valign="top">Reintroduceti<br>
Parola:</td>
<td> </td>
<td align="middle" valign="middle"><input type="password"
name="parola2" value="'.$_SESSION['parola2'].'"></td>
<td> </td>
</tr>
<tr>
<td height="7"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="19" align="right">Nume:</td>
<td> </td>
<td colspan="2" valign="top"><input type="text" name="nume"
value="'.$_SESSION['nume'].'"></td>
</tr>
<tr>
<td height="7"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right">Prenume:</td>
<td valign="top"></td>
<td colspan="2" valign="top"><input type="text" name="prenume"
value="'.$_SESSION['prenume'].'"></td>
</tr>
<tr>
<td height="8"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Varsta:</td>
<td valign="top"></td>
<td colspan="2" valign="top"><input type="text" size="3"
maxLength="3" name="varsta" value="'.$_SESSION['varsta'].'">
ani</td>
</tr>
<tr>
<td height="15"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
180
Laborator Tehnologii Internet Lucrarea nr.9
<tr>
<td height="22" align="right" valign="top">Localitate:</td>
<td valign="top"></td>
<td colspan="2" valign="top"><input type="text" name="localitate"
value="'.$_SESSION['localitate'].'"></td>
</tr>
<tr>
<td height="19"> </td>
<td valign="top"></td>
<td> </td>
<td> </td>
</tr>
<tr>
<td height="24"> </td>
<td valign="top"></td>
<td colspan="2" valign="top"><input name="Trimite" type="submit"
id="Trimite" value="Trimite">
<input name="Reseteaza" type="reset" id="Reseteaza"
value="Reseteaza"> </td>
</tr>
<tr>
<td height="24"> </td>
<td valign="top"></td>
<td> </td>
<td> </td>
</tr>
</form>
</table>';
break;
case 'validare':
$_SESSION['user'] = $_POST['user'];
$_SESSION['parola1'] = $_POST['parola1'];
$_SESSION['parola2'] = $_POST['parola2'];
$_SESSION['nume'] = $_POST['nume'];
$_SESSION['prenume'] = $_POST['prenume'];
$_SESSION['varsta'] = $_POST['varsta'];
$_SESSION['localitate'] = $_POST['localitate'];
181
Laborator Tehnologii Internet Lucrarea nr.9
VALUES ('".addentities($_SESSION['user'])."',
'".md5($_SESSION['parola1'])."', '".addentities($_SESSION['nume'])."',
'".addentities($_SESSION['prenume'])."',
'".addentities($_SESSION['varsta'])."',
'".addentities($_SESSION['localitate'])."')";
mysql_query($cerereSQL);
$_SESSION['user'] = '';
$_SESSION['parola1'] = '';
$_SESSION['parola2'] = '';
$_SESSION['nume'] = '';
$_SESSION['prenume'] = '';
$_SESSION['varsta'] = '';
$_SESSION['localitate'] = '';
}
break;
}
?>
Observm construcia if, care are ca i condiie negativ (!) o funcie isset (se
folosete numai pentru a verifica dac o variabil exist, returneaz adevrat atunci cnd
o gsete i fals atunci cnd nu o gsete). Prin urmare, cu aceast construcie if..
verificm dac $_GET[actiune] este setat, dac nu, o setm noi.
n continuare, uitndu-ne peste script, observm construcia switch. Am folosit
aceasta pentru a implementa mai multe aciuni ntr-o singur pagin.
Dup cum vedem, primul case este null, ceea ce nseamn c se execut scriptul
pentru pagina curenta .php.
Avem un formular n care sunt 7 cmpuri: utilizator, parola, reintroducerea
parolei, nume, prenume, vrsta i localitate.
Daca va uitai ateni, o s observai c n valoarea cmpurilor avem declarate
nite sesiuni:
<input type="text" name="user" value="'.$_SESSION['user'].'">
Vom seta cte o sesiune pentru fiecare cmp, astfel nct s pstrm datele scrise
de el, iar dac utilizatorul completeaz greit cmpurile i este redirecionat la pagina cu
formularul, datele introduse de el vor aprea din nou n formular, astfel nct el va putea
s corecteze doar cmpurile n care a greit.
182
Laborator Tehnologii Internet Lucrarea nr.9
Ca aciune a formularului este setat inregistrare.php?actiune=validare
Acest case l gsii la linia 119.
Dup cum vedei, avem declarate sesiunile de care ne vom folosi n valoarea
cmpurilor din formular, i anume:
$_SESSION['user'] = $_POST['user'];
Valoarea acestei sesiuni user, este valoarea POST cu numele user, i tot aa.
n urmtoarele linii de cod avem structura if i else cu condiiile necesare, iar
dac condiiile nu sunt adevrate, ne rezult eroarea, dac sunt acceptate, rezult
mesajul de mulumire i inserarea n baza de date, apoi setarea sesiunilor folosite ca
fiind nule.
Dup acest case cu numele 'validare', vom nchide structura switch, respectiv
scriptul php.
Observm ca la introducerea n baza de date am complicat procedeul.
Motivul este pentru a ne proteja de procedeul numit SQL INJECTION.
Aceasta operaiune se folosete pentru a introduce vulnerabiliti n comanda
care trimite datele la baza de date (comanda query) i cu ajutorul acestora, se poate
pcli cu uurin baza de date.
Pentru a proteja datele care se introduc prin formular, ne-am folosit de o funcie,
i anume: addentities();
183
Laborator Tehnologii Internet Lucrarea nr.9
9.3.3 Funcii n PHP
O funcie este folosit pentru a separa codul care realizeaz un singur task bine
definit. Acest lucru face codul mai lizibil i ne permite s l reutilizm de fiecare dat
cnd trebuie s efectum acelai task.
Argumentele unei funcii trebuie separate prin virgul, i, implicit, acestea sunt
transmise prin valoare. Pentru ca funcia s returneze un rezultat se folosete construcia
return care primete ca parametru o expresie care reprezint valoarea funciei. n
momentul n care este ntlnit construcia return, execuia funciei se ncheie.
n PHP sunt foarte multe funcii predefinite, ns putei s v concepei i
propriile funcii.
Apelul unei funcii se face: nume_functie();
Majoritatea funciilor necesit unul sau mai muli parametrii informaii oferite
funciei atunci cnd este apelat i care influeneaz rezultatul execuiei funciei
Apelul unei funcii cu parametru se realizeaz astfel:
nume_functie($parametru);
Dac ncercai s apelai o funcie care nu exist, vei primi un mesaj de eroare.
switch($_GET['actiune'])
{
case '':
echo '<form action="autentificare.php?actiune=validare" method="post">
Utilizator: <input type="text" name="user" value=""><br>
Parola: <input type="password" name="parola" value=""><br>
<input type="submit" name="Login" value="Login">
</form>';
break;
case 'validare':
$_SESSION['user'] = $_POST['user'];
n aceasta construcie else, avem selectarea din baza de date unde cmpul
utilizator este egal cu POST user, iar parola este egal cu criptarea parolei pentru POST
parola.
Dac numrul de rnduri rezultate este 1, atunci setm o sesiune cu numele logat
i valoarea Da, apoi redirecionm - cu ajutorul etichetei HTML meta refresh ctre
pagina utilizatorului.
Dac numrul de rnduri rezultate nu este 1, atunci afim un mesaj de eroare.
n cazul n care rezultatele au fost gsite n baza de date, autentificarea s-a
efectuat cu succes i vom fi redirecionai n pagina.php
185
Laborator Tehnologii Internet Lucrarea nr.9
9.5 Scriptul pagina utilizator pagina.php
<?php
require_once('config.php');
if($_SESSION['logat'] != 'Da')
{
echo 'Pentru a accesa aceasta pagina, trebuie sa va autentificati.
<br>
Pentru a va autentifica, apasati <a href="autentificare.php">
aici</a><br>
Pentru a va inregistra, apasati <a href="inregistrare.php">
aici</a>';
}
else
{
switch($_GET['actiune'])
186
Laborator Tehnologii Internet Lucrarea nr.9
{
case '':
echo '<h1>Profilul dumneavoastra</h1>
Apasati <a href="profil.php?actiune=date_personale">aici</a>
pentru a schimba datele personale.<br>
Apasati <a href="profil.php?actiune=parola">aici</a> pentru a
schimba parola dumneavoastra.<br><br>
<a href="pagina.php">Intoarceti`va la pagina principala.</a>';
break;
case 'date_personale':
$cerereSQL = 'SELECT *
FROM `utilizatori` WHERE
utilizator="'.$_SESSION['u
ser'].'"';
$rezultat =
mysql_query($cerereSQL);
while($rand =
mysql_fetch_array($rezulta
t))
{
echo '<table width="347"
border="0" cellpadding="0" cellspacing="0">
<form name="formular" action="profil.php?actiune=validare"
method="post">
<tr>
<td height="50" colspan="4" valign="top"><h1>Modifica date
personale</h1></td>
</tr>
<tr>
<td width="80" height="19"> </td>
<td width="15"> </td>
<td width="214"> </td>
<td width="38"> </td>
</tr>
<tr>
<td height="10"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Nume:</td>
<td valign="top"></td>
<td valign="top"><input type="text" name="nume"
value="'.$rand['nume'].'"></td>
<td></td>
</tr>
<tr>
<td height="9"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Prenume:</td>
<td valign="top"></td>
<td valign="top"><input type="text" name="prenume"
value="'.$rand['prenume'].'"></td>
187
Laborator Tehnologii Internet Lucrarea nr.9
<td></td>
</tr>
<tr>
<td height="9"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Varsta:</td>
<td valign="top"></td>
<td valign="top"><input type="text" size="3" maxLength="3"
name="varsta" value="'.$rand['varsta'].'">
ani</td>
<td></td>
</tr>
<tr>
<td height="8"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Localitate:</td>
<td valign="top"></td>
<td valign="top"><input type="text" name="localitate"
value="'.$rand['localitate'].'"></td>
<td></td>
</tr>
<tr>
<td height="14"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="24"></td>
<td valign="top"></td>
<td valign="top"><input name="Trimite" type="submit" id="Trimite"
value="Modifica date">
<input name="Reseteaza" type="reset" id="Reseteaza"
value="Reseteaza"> </td>
<td></td>
</tr>
<tr>
<td height="19"></td>
<td valign="top"></td>
<td> </td>
<td></td>
</tr>
</form>
</table>';
}
break;
case 'parola':
188
Laborator Tehnologii Internet Lucrarea nr.9
<form name="formular" action="profil.php?actiune=validare"
method="post">
<tr>
<td height="36" colspan="4" valign="top"><h1>Modifica
parola</h1></td>
</tr>
<tr>
<td width="80" height="19" valign="top"> </td>
<td width="15" rowspan="5" valign="top"></td>
<td width="144" valign="top"> </td>
<td width="70" valign="top"> </td>
</tr>
<tr>
<td height="22" align="right" valign="top">Parola:</td>
<td colspan="2" valign="top">
<input type="password" name="parola1" value=""> </td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Reintroduceti
parola:</td>
<td colspan="2" valign="middle"><input type="password"
name="parola2" value=""></td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="24"> </td>
<td valign="top"></td>
<td colspan="2" valign="top"><input name="Trimite" type="submit"
id="Trimite" value="Modifica parola">
<input name="Reseteaza" type="reset" id="Reseteaza"
value="Reseteaza"> </td>
</tr>
<tr>
<td height="24"> </td>
<td valign="top"></td>
<td> </td>
<td> </td>
</tr>
</form>
</table>';
break;
case 'validare':
189
Laborator Tehnologii Internet Lucrarea nr.9
if(!isset($_POST['nume'])) $_SESSION['nume'] = '';
else $_SESSION['nume'] = $_POST['nume'];
$_SESSION['nume'] = '';
$_SESSION['prenume'] = '';
$_SESSION['varsta'] = '';
$_SESSION['localitate'] = '';
}
elseif(($_POST['Trimite'] == 'Modifica parola') &&
($_SESSION['parola1'] == '' || $_SESSION['parola1'] !=
$_SESSION['parola2']))
{
echo 'Completeaza campurile.<br>
Apasa <a href="profil.php?actiune=parola">aici</a> pentru a te
intoarce.';
}
elseif(($_POST['Trimite'] == 'Modifica parola') &&
($_SESSION['parola1'] != '' || $_SESSION['parola1'] ==
$_SESSION['parola2']))
{
echo 'Parola a fost modificata. <br>
Apasa <a href="pagina.php">aici</a> pentru a te intoarce la
pagina principala.';
190
Laborator Tehnologii Internet Lucrarea nr.9
$cerereSQL = "UPDATE `utilizatori` SET
parola='".md5($_SESSION['parola1'])."' WHERE
utilizator='".$_SESSION['user']."'";
mysql_query($cerereSQL);
$_SESSION['parola1'] = '';
$_SESSION['parola2'] = '';
}
break;
}
}
?>
Exemplu:
<input type="text" name="nume" value="'.$rand['nume'].'">
<?php
session_start();
session_destroy();
session_unset();
echo 'Ati iesit din sistem. <br>
Pentru a va intoarce la pagina principala, apasati
<a href="index.php">aici</a>';
?>
191
Laborator Tehnologii Internet Lucrarea nr.10
<html>
<head>
<title>Formular de contact</title>
</head>
<body>
<form action="trimite.php" method="post">
<br><br>
<input type="submit" name="Trimite" value="Trimite">
<input type="reset" name="Reseteaza" value="Reseteaza">
</form>
</body>
</html>
Se salveaz i se vizualizeaz n browser accesand
http://localhost/contact/index.php.
192
Laborator Tehnologii Internet Lucrarea nr.10
echo 'Completati campurile corect <br>
Apasati <a href="index.php">aici</a> pentru a va intoarce la
pagina principala.';
}
else
{
$catre = 'adresaemail@yahoo.com';
$data_trimitere = date('d-m-Y H:i:s');
$subiect = $_POST['subiect'];
$mesaj = '
<html>
<head>
<title>Formular de Contact</title>
</head>
<body>
<p><tt>Data trimitere: '.$data_trimitere.' </tt></p>
<table>
<tr>
<td><tt> Nume: '.$_POST['nume'].' </tt></td>
</tr>
<tr>
<td><tt> Prenume: '.$_POST['prenume'].' </tt></td>
</tr>
<tr>
<td><tt> E-Mail: <a href="mailto:'.$_POST['email'].'"> '.$_POST
['email'].'</a> </tt></td>
</tr>
<tr>
<td><tt> Mesaj: <br><br> '.$_POST['mesaj'].' </tt></td>
</tr>
</table>
</body>
</html>';
$headere = "MIME-Version: 1.0\r\n";
$headere .= "Content-type: text/html; charset=iso-88591\r\n";
headere .= "From: ".$_POST['nume']."
".$_POST['prenume']."<".$_POST['email'].">\r\n";
mail($catre, $subiect, $mesaj, $headere);
echo 'Mesajul a fost trimis';
}
?>
Modificai adresa de email din variabila $catre ='adresaemail@yahoo.com';
cu email-ul dvs.
Pentru a face acest script s trimita mail, este aveti nevoie de un server SMTP,
un server de E-Mail.
V recomand serverul QK care poate fi descrcat de la adresa
http://www.qksoft.com/ Dup ce ai instalat serverul i l-ati pornit, ar trebui s v apar
n bara de start de lnga ceas.
Testai scriptul i verificai email-ul dvs pentru a vedea dac ai primit mesajul.
(n caz c nu apare n Inbox, uitai-v n Bulk).
Observai c n scriptul trimite.php ne-am folosit de condiiile if i else (condiii
pe care deja le tiam) ns am folosit i 2 noi functii, i anume: date(); i mail();
193
Laborator Tehnologii Internet Lucrarea nr.10
194
Laborator Tehnologii Internet Lucrarea nr.10
Pentru ca trimiterea mail-ului s se fac mai rapid i mai uor i s fie mai uor
de interpretat de ctre serverul de email i client, trebuie s i definim parametrii pentru
headere.
<?php
mail("adresamail@yahoo.com", "Subiectul", "Mesajul",
"From: adresamail@gmail.com\r\n" . "Reply-To:
adresamail@hotmail.com\r\n"."X-Mailer: PHP/"
. phpversion());
?>
195
Laborator Tehnologii Internet Lucrarea nr.11
Tabela bazei de date trebuie s aib cinci cmpuri (care sunt obligatorii), i
anume:
id - int(11), not-null, auto_increment ;
titlu varchar(255), not-null, cu minim 2 caractere, cel mult 255;
adresa varchar(255), not-null, cu minim 2 caractere, cel mult 255;
descriere varchar(255), not-null, cu minim 2 caractere, cel mult 255;;
vizite bigint(10), not-null, default = 0.
<?php
session_start();
set_time_limit(0);
error_reporting(E_ALL);
$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!");
function addentities($data){
if(trim($data) != ''){
$data = htmlentities($data, ENT_QUOTES);
return str_replace('\\', '\', $data);
} else return $data;
} // End addentities() --------------
?>
196
Laborator Tehnologii Internet Lucrarea nr.11
n continuare se realizeaz fiierul index.php n care se introduce codul de mai
jos, i se vizualizeaz n browser.
<?php
echo '<a href="adauga.php">Adauga site</a> | <a href="cauta.php">Cauta
site</a>';
?>
switch($_GET['pag'])
{
case '':
echo '<form name="adauga" action="adauga.php?pag=verifica"
method="post">
Titlu: <br> <input type="text" name="titlu"
value="'.$_SESSION['titlu'].'"><br><br>
Adresa: <br> <input type="text" name="adresa"
value="'.$_SESSION['adresa'].'"><br><br>
Descriere: <br> <textarea name="descriere" rows="6" cols="45"
value="'.$_SESSION['descriere'].'">'.$_SESSION['descriere'].'</texta
rea><br><br>
<input type="submit" name="Adauga" value="Adauga">
</form>';
break;
case 'verifica':
$_SESSION['titlu'] = $_POST['titlu'];
$_SESSION['adresa'] = $_POST['adresa'];
$_SESSION['descriere'] = $_POST['descriere'];
197
Laborator Tehnologii Internet Lucrarea nr.11
$cerereSQL = "INSERT INTO `intrari` (`titlu`, `adresa`,
`descriere`)
VALUES ('".addentities($_SESSION['titlu'])."',
'".addentities($_SESSION['adresa'])."',
'".addentities($_SESSION['descriere'])."');";
mysql_query($cerereSQL);
$_SESSION['titlu'] = '';
$_SESSION['adresa'] = '';
$_SESSION['descriere'] = '';
n case-ul default, case ' ':, avem formularul cu cmpurile: titlu, adresa,
descriere iar ca valoare a acestora avem setate sesiunile corespunztoare lor.
n case-ul 'verific', observm setarea sesiunilor cu date trimise de utilizator
prin metoda $_POST, instruciunea if, n care avem condiiile, apoi instruciunea else ce
va executa introducerea n baza de date, golirea sesiunilor folosite i afiarea unui text
n pagin.
Ca protecie a introducerii datelor, s-a folosit funcia addentities().
Introducei cteva adrese n baza de date, pentru a testa cutarea.
198
Laborator Tehnologii Internet Lucrarea nr.11
11.2.2 Fiierul cauta.php
Scriptul pentru pagina cauta.php :
<?php
require_once 'config.php';
case '':
echo '<form name="cauta" action="cauta.php?pag=cauta" method="post">
Titlu: <input type="text" name="cauta" value=""> <input
type="submit" name="Cauta" value="Cauta"> <br>
<a href="cauta.php?pag=cautare-avansata">Cautare avansata</a>
</form>';
break;
case 'cauta':
if($_POST['cauta'] == '') {
echo 'Introdu un cuvant pentru a cauta in baza de date. <br>
Apasa <a href="cauta.php">aici</a> pentru a te intoarce.';
} elseif(strlen($_POST['cauta']) < 3) {
echo 'Cuvantul trebuie sa contina cel putin 3 caractere. <br>
Apasa <a href="cauta.php">aici</a> pentru a te intoarce.';
} else {
$cerereSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE
"%'.addentities($_POST['cauta']).'%"';
$rezultat = mysql_query($cerereSQL);
if(mysql_num_rows($rezultat) > 0) {
while($rand = mysql_fetch_array($rezultat)) {
echo '<a href="'.$rand['adresa'].'">'.$rand['titlu'].'</a> -
'.$rand['adresa'].'<br> <i>'.$rand['descriere'].'</i> <br><br>';
}
} else {
echo 'Nu au fost gasite rezultate pentru cautarea: <font
color="red"><b><i>'.addentities($_POST['cauta']).'</i></b></font> <br>
Apasati <a href="cauta.php">aici</a> pentru a va intoarce';
}
break;
case 'cautare-avansata':
199
Laborator Tehnologii Internet Lucrarea nr.11
break;
case 'cautare-avansata2':
if($_POST['cauta'] == '') {
echo 'Introdu un cuvant pentru a cauta in baza de date. <br>
Apasa <a href="cauta.php">aici</a> pentru a te intoarce.';
} elseif(strlen($_POST['cauta']) < 3) {
echo 'Cuvantul trebuie sa contina cel putin 3 caractere. <br>
Apasa <a href="cauta.php">aici</a> pentru a te intoarce.';
} else {
$rezultat = mysql_query($cerereSQL);
if(mysql_num_rows($rezultat) > 0) {
200
Laborator Tehnologii Internet Lucrarea nr.11
echo 'Cautati in: <font color="red">'.$in.'</font> dupa:
<font
color="red"><b>'.addentities($_POST['cauta']).'</b></font><br><br>';
while($rand = mysql_fetch_array($rezultat)) {
echo '<a href="'.$rand['adresa'].'">'.$rand['titlu'].'</a> -
'.$rand['adresa'].'<br> <i>'.$rand['descriere'].'</i> <br><br>';
}
} else {
echo 'Nu au fost gasite rezultate pentru cautarea: <font
color="red"><b><i>'.addentities($_POST['cauta']).'</i></b></font> in
<font color="red">'.$in.'</font><br>
Apasati <a href="cauta.php?pag=cautare-
avansata">aici</a> pentru a va intoarce';
}
}
break;
}
?>
comand SQL:
Aceast comand SQL, selecteaz tot din baza de date unde cmpul titlul
conine cuvntul trimis prin formular $_POST['cauta'].
Aceasta este o cutare simpl n baza de date, dup titlu, ns se poate realiza i
o cutare mai avansat dup titlu, adres sau descirere.
Analiznd case-ul 'cautare avansata':, observ, scriptul pentru cutare
avansat:
if(($_POST['in1'] != 'titlu') && ($_POST['in2'] != 'adresa') &&
($_POST['in3'] != 'descriere'))
{
$cerereSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE
"%'.addentities($_POST['cauta']).'%"';
$in = '';
}
Aceast parte de cod se interpreteaz astfel:
Dac valoarea post in1 nu este egal cu titlu, i valoarea post in2 nu este egal
cu adresa, i valoarea post in3 nu este egal cu descriere:
{
creeaz o variabil cerereSQL care s caute doar n titlu dup textul dat,
creeaz o variabil cu numele "in" cu valoare nul,
}
201
Laborator Tehnologii Internet Lucrarea nr.11
Dac valoarea post in1 este egal cu titlu (adic dac opiunea titlu a fost
selectat), i dac valorile post-ului 2 i 3 nu sunt selectate
{
creeaz o variabila cerereSQL care s caute n titlu dup textul dat
creeaz o variabil cu numele in cu valoarea titlu
}
.
elseif(($_POST['in1'] == 'titlu') && ($_POST['in2'] == 'adresa') &&
($_POST['in3'] != 'descriere'))
{
$cerereSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE
"%'.addentities($_POST['cauta']).'%" AND `adresa` LIKE
"%'.addentities($_POST['cauta']).'%"';
$in = 'titlu, adresa';
}
Dac valoarea post in1 este egal cu titlu (adic dac opiunea titlu a fost
selectat), i dac valoarea post-ului in2 este egal cu adresa (adic dac i opiunea
adresa a fost bifat), i dac valoarea post-ului in3 nu este descriere
{
creeaz o variabil cerereSQL care s caute n titlu i adresa dup textul dat
creeaz o variabil cu numele in cu valoarea titlu, adresa
}
.
Efectuai un test n browser, n funcie de adresele introduse de dumneavoastr
n formular, bifai opiunile pe rnd i testai.
202
Laborator Tehnologii Internet Lucrarea nr.12
<?php
session_start();
set_time_limit(0);
error_reporting(E_ALL);
function addentities($data){
if(trim($data) != ''){
$data = htmlentities($data, ENT_QUOTES);
203
Laborator Tehnologii Internet Lucrarea nr.12
return str_replace('\\', '\', $data);
} else return $data;
} // End addentities() --------------
?>
$_SESSION['utilizator'] = 'student';
$adresa_ip = $_SERVER['REMOTE_ADDR'];
$rezultat = mysql_query($cerereSQL);
if(mysql_num_rows($rezultat) > 0)
{
while($rand = mysql_fetch_array($rezultat)) {
$motiv = $rand['motiv'];
}
}
if(isset($motiv)) {
echo 'Acces interzis asupra paginii, motivul: <i>'.$motiv.'</i>';
} else {
echo 'Continutul paginii.<br>
Apasa <a href="admin.php">aici</a> pentru a interzice acces-ul
asupra paginii.';
}
?>
204
Laborator Tehnologii Internet Lucrarea nr.12
<?php
require_once 'config.php';
205
Laborator Tehnologii Internet Lucrarea nr.12
12.3 Partea a II-a contorizare click-uri
Avem nevoie de o baz de date. n acest scop o vom folosi pe aceea care a fost
utilizat n lucrarea cu scripturile de cutare. Vom utiliza celula vizite din baza de date
cautare, tabela intrari.
n directorul rdcin al serverului web (Apache) vom crea directorul
contorizare, n care vom copia fiierul config.php din directorul contorizare (este
acelai, deoarece ne conectm la aceeai baz de date).
Realizm o pagin cu numele index.php, n care introducem scriptul de mai jos:
<?php
require_once('config.php');
case '':
$cerereSQL = 'SELECT * FROM `intrari`';
$rezultat = mysql_query($cerereSQL);
while($rand = mysql_fetch_array($rezultat))
{
echo '<a href="index.php?pag=
redirectionare&id='.$rand['id'].'">'.$rand['titlu'].'</a> -
'.$rand['adresa'].' <font color="blue" size="2">(vizualizari:
'.$rand['vizite'].')</font> <br> <i>'.$rand['descriere'].'</i>
<br><br>';
}
break;
case 'redirectionare':
if(!is_numeric($_GET['id'])) {
echo 'ID nu este numeric, ce incerci sa faci?';
} else {
$cerereSQL = 'SELECT * FROM `intrari` WHERE id="'.$_GET['id'].'"';
$rezultat = mysql_query($cerereSQL);
while($rand = mysql_fetch_array($rezultat))
{
header("Location: ".$rand['adresa']."");
$cerereSQL = 'UPDATE `intrari` SET vizite="'.($rand
['vizite']+1).'" WHERE id="'.$rand['id'].'"';
$rezultat = mysql_query($cerereSQL);
}
}
break;
}
?>
206
Laborator Tehnologii Internet Lucrarea nr.12
Redirecionm utilizatorul ctre pagina selectata prin metoda header Location.
header("Location: ".$rand['adresa']."");
Apoi updatam vizitele cu +1, unde id-ul este id-ul trimis prin $_GET.
Accesai din nou pagina principal index.php i observai rezultatele:
OBS: php este un limbaj case sensitive, dac unul din cmpurile din baza de
date are numele scris cu litere mari (de exemplu ID), atunci scriptul index-php de mai
sus trebuie corectat (s fie scris ID i nu id).
207
Tehnologii Internet
Bibliografie
1. http://www.bsdguides.org/guides/freebsd/
2. http://www.cssplaza.com/tutoriale-css/
3. http://www.dplus.ro/resurse.php#ghid
4. http://www.drogoreanu.ro/tutorials/index.php
5. http://www.freebsd.org/
6. http://freebsd.ournet.md/docs/system/index.phtml
7. http://www.geocities.com/WallStreet/Floor/7071/jstutor.htm
8. http://www.infodamina.ro/jscript/index.html
9. http://www.itzone.ro/tutoriale.php?categorie_id=9
10. http://jalobean.itim-cj.ro/Cursuri/www.my-sql.go.ro/instalare.htm#mysqll
11. http://www.linux-magazin.ro/
12. http://www.mcli.dist.maricopa.edu/tut/lessons.html
13. http://www.mydigitallife.info/2006/04/13/installing-web-server-in-freebsd-60-
with-apache-22-mysql-50-and-php-5-part-4/
14. www.oriceon.com/tutoriale
15. http://www.supremeweb.org/fusion/news.php
16. http://www.rofug.ro/
17. http://www.tutoriale.far-php.ro/
18. http://www.worklance.com/htmltutorial/
19. The PHP begginers tutorial - Leendert Brouwer, PHP Pocket Reference editia 2
OReilly, Manual PHP (ro) HTML And XHTML The Definitive Guide editia
5 OReilly;
20. Iniiere n PHP & MySQL, Valentin Ivacu, 06.2005
208
Cuprins
209
Tehnologii Internet
4.3.6. Instalare PHP 5.1.4 ................................................................................................................42
4.4. FTP PROTOCOLUL FTP .........................................................................................................43
4.4.1. Instalarea i configurarea unui server FTP............................................................................43
4.5. SMTP PROTOCOLUL SMTP...................................................................................................45
4.5.1. Funcionare.............................................................................................................................45
4.5.2. Realizarea comunicaiei SMTP - exemplu ..............................................................................46
4.6. POP PROTOCOLUL POP.........................................................................................................47
4.6.1. Operaia de baz.....................................................................................................................47
4.6.1.1. Starea AUTHORIZATION ..................................................................................................... 48
4.6.1.2. Starea TRANSACTION.......................................................................................................... 49
4.6.1.3. Starea UPDATE ...................................................................................................................... 51
4.6.2. Concluzii .................................................................................................................................54
4.6.3. protocolul IMAP .....................................................................................................................55
4.7. PROTOCOALE CRIPTOGRAFICE SSL I TLS...............................................................................55
4.7.1. Descriere i funcionare..........................................................................................................55
4.7.2. Aplicaii ale SSL......................................................................................................................56
210
Cuprins
5.7.3.7. Instruciunea CONTINUE....................................................................................................... 95
5.7.3.8. Alte structuri PHP ................................................................................................................... 96
5.7.4. Lucrul cu formularele .............................................................................................................96
5.7.4.1. Prelucrarea datelor din formular.............................................................................................. 96
5.7.4.2. Verificarea datelor trimise prin formular................................................................................. 97
5.8. INTRODUCERE N MYSQL........................................................................................................98
5.8.1. Crearea bazelor de date........................................................................................................100
5.8.2. Utilizarea PHP pentru conectarea la MySQL ......................................................................102
5.8.2.1. Comanda SELECT................................................................................................................ 103
5.8.2.2. Comanda INSERT ................................................................................................................ 104
5.8.2.3. Comanda UPDATE............................................................................................................... 105
5.8.2.4. Comanda DELETE ............................................................................................................... 106
5.9. ASP, ASPX(.NET)..................................................................................................................107
5.10. JAVASCRIPT ...........................................................................................................................107
5.11. AJAX TEHNOLOGIA AJAX, ...................................................................................................112
Lucrri de laborator
BIBLIOGRAFIE ...................................................................................................................................208
CUPRINS ................................................................................................................................................209
213