Manual Vechi Si Depasit de HTML4
Manual Vechi Si Depasit de HTML4
HTML este folosit pentru prezentarea unui continut (text, imagine) intr-o pagina
web, furnizeaza mijloacele prin care continutul unui document poate fi
structurat si adnotat cu diverse tipuri de metadate si indicatii de redare si
afisare. Aceste indicatiile pot varia de la decoratiuni minore ale textului, cum ar
fi culoarea sau sublinierea unui cuvant ori introducerea unei imagini, pana la
adaugarea de elemente sofisticate, tabele, harti de imagini, formulare si cod
CSS sau scripturi JavaScript.
Metadatele pot include informatii despre titlul si autorul documentului,
informatii structurale despre cum este impartit documentul in diferite segmente,
paragrafe, liste, titluri etc. si informatii esentiale care permit ca documentul sa
poata fi legat de alte documente pentru a forma astfel hiperlink-uri.
HTML este un format text proiectat pentru a putea fi citit si editat utilizand un
editor de text simplu, editarea si intelegerea paginilor in acest fel necesita
cunostinte de HTML, pe care le puteti obtine studiind lectiile din acest curs.
Exista si editoare grafice, de tip WYSIWYG (What You See Is What You Get -
"ceea ce vezi este ceea ce obtii"), cum ar fi Macromedia Dreamweaver, Adobe
GoLive sau Microsoft FrontPage, care permit ca paginile web sa fie tratate
asemanator cu documetele Word si genereaza ele cod HTML pentru continutul
paginii, dar aceste programe genereaza un cod HTML care este de multe ori
prea incarcat si de proasta calitate.
HTML este de asemenea utilizat in e-mail. Majoritatea aplicatiilor de e-mail
folosesc un editor HTML incorporat pentru compunerea e-mail-urilor si un motor
de prezentare a e-mail-urilor de acest tip.
Acest curs prezinta elementele de baza ale limbajului HTML si modul de lucru cu
acesta, va ajuta sa invatati cum sa creati pagini web folosind aceasta
tehnologie.
Tot ce aveti nevoie este un editor de texte simplu, cum ar fi Notepad++ sau
Gedit, si un navigator de web, recomandabil Mozilla Firefox.
Pentru a invata cat mai bine elementele prezentate in aceste lectii, exersati
personal fiecare exemplu prezentat si creati si altele pornind de la acestea.
Retineti ca acest curs reprezinta o baza si un punct de pornire pentru invatarea
HTML, ne fiind prezentate aici toate proprietatile si elementele HTML.
- Este un set de coduri logice care constituie apariia unui document web si a
informatiilor pe care le deine. Codurile sunt scrise intre "<" (paranteza
deschisa) si ">" (paranteza inchisa), cu toate ca nu sunt chiar paranteze,
aa se numesc si arata aa: < >.
Exemplu:
- Un document (fisier) HTML este alcatuit din mai multe elemente si atributele
lor.
- La nceput un element HTML cuprinde (nconjoar ) datele documentului.
Acest element conine doua sub-elemente principale: HEAD si BODY. In HEAD
se poate adauga titlul paginii web si alte elemente numite metatag-uri, precum
si scripturi JavaScript si stil-uri CSS. In BODY se adauga continutul documentului
care va fi afisat in pagina web.
Exemplu:
<html>
<head>
<title>Titlu Documentului</title>
</head>
<body>
Continutul paginii
</body>
</html>
<HTML>
<HEAD> Acesta are si el mai multe sub-elemente:
<TITLE> Aici se scrie titlul documentului, cat mai sugestiv, si se ncheie
cu </TITLE>
<BASE> Poate fi folosit pentru a nregistra locaia documentului in forma
URL. (Necesar daca documentul nu este accesat in locaia lui originala). Se
ncheie cu </BASE>
<LINK> Indica o relaie dintre document si alte obiecte de pe WEB. Se
ncheie cu </LINK>
<META> Aici sunt scrise informaii cum ar fi tastatura (limbaj) folosita,
descrierea si cuvinte cheie care pot fi gsite de motoarele de cutare. Se
ncheie cu </META>
<SCRIPT> Conine oricare din JavaScript sau VB Script. Se ncheie cu
</SCRIPT>
<STYLE> Conine informaii privind stilul, grafica informaiilor care vor
aprea pe pagina. Se ncheie cu </STYLE>
Aici se ncheie elementele adaugate in HEAD
</HEAD>
<BODY> Etichetele HTML si continutul documentului care va fi afisat in
pagina web sunt incluse in acest element. Aici pot fi puse si elemente cum ar fi:
<SCRIPT> </SCRIPT>
Se ncheie cu
</BODY>
</HTML>
Cum ati vazut in Lectia 1, sunt elemente sigure, generale, care sunt necesare
pentru crearea unui document HTML.
Pentru nceput deschideti aplicatia NotePad si scrieti structura de baza a unei
pagini web. Aceasta este:
<html>
<head>
<title> Titlul </title>
</head>
<body>
Continut
</body>
</html>
Acum pagina dv. are HEAD si BODY in interiorul bazei <HTML>.
In interiorul elementului HEAD are elementul TITLE, pe care ar trebui sa-l
completati cu un text reprezentativ ca titlu al documentului dv.; si in BODY un
Elementul BODY
<body bgcolor="#0000ff"></body>
Culoarea textului
Dupa ce ati creat baza de nceput a unui document si ati setat proprietatile,
trebuie sa salvati fisierul. Salvarea trebuie facuta intr-un format pe care browser-
ul l poate recunoaste. Extensia standard pentru un fisier care reprezinta o
pagina web este ".htm" sau ".html". De obicei folosesc (".html").
- Pentru a salva documentul ca sa arate ca o pagina web, in NotePad alegeti
din meniul File comanda Save si salvati fisierul cu orice nume doriti dar cu
extensia html (sau "htm") - (La File name: scrieti si numele si extensia ".html",
exemplu: index.html). Daca nu scrieti extensia, NotePad va salva documentul in
format "txt".
- Pentru a vedea documentul ca o pagina web, duceti-va in directorul in care ati
salvat fisierul si deschideti-l pur si simplu (cu Enter sau dublu-click la mouse),
acesta va fi deschis automat de browser-ul pe care-l folositi (Mozilla Firefox,
Internet Explorer, Opera). Sau deschide-ti browser-ul si din comanda Open
deschideti documentul pe care l-ati salvat.
- Pentru a continua munca, a face modificari paginii sau pentru a adauga
altceva in documentul HTML, deschideti documentul cu NotePad. Una din
metode este sa deschideti aplicatia NotePad si din meniul File alegeti Open apoi
gasiti fisierul pe care vreti sa-l modificati si dati clic pe butonul Open. Dupa ce
<h6>Heading 6</h6>
</body>
</html>
- Tag-ul <br> permite sa decizi unde textul va incepe un nou rnd, astfel
se forteaza nceperea unui nou rnd.
- <br> este un Element Gol dar poate sa conin atribut. <br> nu are si nu
cere element de nchidere, nu se foloseste </br>
Formatul textului
HTML contine mai multe elemente, tag-uri si atribute, pentru afisarea textului in
mai multe formate cu aspecte grafice diferite.
Cu acest element, <FONT>, puteti modifica aspectul textului, cum sunt tipul
fontului folosit, marimea si culoarea textului.
Exemplu :
Exemplu :
Exemplu :
Exemple:
<b> Bold </b>
<i> Italic </i>
<u> Underline </u>
Mai jos puteti vedea cteva exemple de coduri si modul lor de afisare in
browser.
<html>
<head>
<title>titlu documentului</title>
</head>
3. Alinierea
Cteva elemente pot avea atributul (ALIGN) pentru aliniere, cum ar fi Titlurile
<Hx> , Paragraful <p></p> si Linia orizontala <hr> . Cele trei valori ale
atributului ALIGN sunt: LEFT, RIGHT si CENTER.
Aliniamentul celor mai multe elemente se face cu ajutorul altor elemente:
In continuare puteti vedea un exemplu cu aceste coduri de mai sus si felul cum
sunt afisate de browser.
<html>
<head>
<title>Titlu documentului</title>
</head>
<body>
<p>
<strike> Text taiat </strike><br>
- Urmatoarele elemente pentru format sunt folosite mai rar si sunt pentru
documente cu aplicatii tehnice
In continuare puteti vedea un exemplu cu aceste coduri de mai sus si felul cum
sunt afisate de browser.
<html>
<head>
<title>Titlu documentului</title>
</head>
<body>
<p>
<dfn> Definite exemplu de termen inchis </dfn><br>
<code> Folosit pentru extragerea unui cod de program </code><br>
<samp> Folosit pentru simple productii de programe, scripturi , etc.
</samp><br>
<kbd> Folosit pentru text care va fi scris de utilizator </kbd><br>
<var> Folosit pentru variabile sau argumente de comenzi </var><br>
</p>
</body>
</html>
- In browser va fi afisat asa:
Definite exemplu de termen inchis
Folosit pentru extragerea unui cod de program
Folosit pentru simple productii de programe, scripturi , etc.
Folosit pentru text care va fi scris de utilizator
Folosit pentru variabile sau argumente de comenzi
In continuare puteti vedea un exemplu cu aceste coduri de mai sus si felul cum
sunt afisate de browser.
<html>
<head>
<title>Titlu documentului</title>
</head>
<body>
<p>
<q>Daca vrei si crezi, orice este posibil.</q>
<blockquote>
Bucuriile neimpartasite pot aduce tristete iar suferinta impartasita poate sa
aduca bucurie. <br>
Aceasta este prima zi din restul vietii tale.
</blockquote>
<center>
<address>180 Attwell Dr. Suite 130 <br> Toronto, ON <br> M9W
6A9</address>
</center>
</p>
</body>
</html>
- In browser va fi afisat asa:
Daca vrei si crezi, orice este posibil.
Bucuriile neimpartasite pot aduce tristete iar suferinta impartasita poate sa
aduca bucurie.
Aceasta este prima zi din restul vietii tale.
180 Attwell Dr. Suite 130
Toronto, ON
M9W 6A9
Marcatori si numerotare
HTML contine cateva tag-uri utile pentru asezarea continutului in pagina. Prin
acestea textul este mai usor de citit si evidentiat.
Iata un exemplu:
<html>
<head>
<title>titlu documentului</title>
</head>
<body>
<ol>
<li>List item 1 ...</li>
<li>List item 2 ...</li>
<li>List item 3 ...</li>
</ol>
</body>
</html>
- In pagina web apare asa:
Sunt mai multe tipuri de numerotare care pot fi folosite. Acestea sunt controlate
de atributul "type care este adaugat in elementul <ol>, le puteti vetea mai jos:
- Alta lista:
Alte elemente pentru asezarea textului sunt: tag-ul <dl>, care cuprinde in el
elementele <dt> si <dd>
- <dl> ... </dl> este folosit (impreuna cu "dt" si "dd") pentru definirea si
incadrarea unei liste de definitii.
- <dt> ... </dt> Defineste elementul din lista. Fiecare tip de astfel de
element trebuie precedad de unul sau mai multe elemente <dd> ...
</dd>, folosite pentru descrierea elementului definit.
Cele mai folosite formate pentru imaginile adaugate intr-o pagina HTML sun GIF
si JPEG (JPG ; JPE), avantajul acestora este ca imaginile care au aceste extensii
au o marime mica (in bytes), avand maximum 256 de culori.
Alte tipuri de formate (folosite mai rar) sunt:
- hspace - Acest atribut este pentru spatiu orizontal pe ambele parti ale
imaginii, specificat in pixeli. De exemplu o valoare de 5 va pune un spatiu
invizibil, de 5 pixel, in prtile orizontale ale imaginii.
- vspace - Acest atribut este pentru spatiu vertical pe ambele parti ale
imaginii, specificat in pixeli. De exemplu o valoare de 5 va pune un spatiu
invizibil, de 5 pixel, in prtile verticale ale imaginii.
Crearea de link-uri
Link-urile (links) sunt elemente HTML cu ajutorul carora putem deschide alte
pagini, sari de la un document la altul sau la alt site. Sunt foarte importante in
crearea de pagini web.
Forma generala pentru crearea unui link este urmatoarea:
Cand documentul este alcatuit din mai multe cadre se foloseste si atributul
target, vezi Lectia 10
Exemplu:
1. Link-uri externe - (sunt cele mai utilizate), care sunt si ele de doua feluri:
a) Link-uri externe ctre pagini ale aceluiasi site. Pentru acestea URL-ul
poate sa nu includa si domeniul site-ului, cum ar fi "http://www.nume.com", ci se
poate folosi doar cale in directoare, numele si extensia documentului la care se
face saltul.
De exemplu:
- daca documentul tinta se afla intr-un director din cel care se afla fisierul
in care se scrie link-ul, codul va fi scris asa:
b) Link-uri externe ctre alte site-uri. Aici, adresa URL din link trebuie sa
contina si domeniul (numele site-ului) paginii tinta, codul HTML se va scrie, de
exemplu, asa:
2. Link-uri interne - sunt link-uri ctre alte texte din aceeasi pagina. Se
folosesc cnd pagina respectiva este lunga si e nevoie sa se sara spre anumite
texte din pagina.
- Pentru creare de link-uri interne trebuie urmati urmatorii pasi:
o <a href="#cuvant">Nume</a>
Link-urile interne si externe pot fi combinate. Astfel putem face saltul ctre un
anumit text aflat intr-o alta pagina. In pagina respectiva se scrie codul de la
pasul 1, la textul ales pentru tinta link-ului, iar in pagina in care va fi link-ul se
scrie:
<a href="adresa_pagina#cuvant">Nume</a>
<area atribute>
- Observati ca mouse-ul isi schimba forma numai cand este deasupra zonelor
care au fost definite ca sa fie suprafete a hartii de imagini. Aceasta definire nu
este facuta prin desen, ci prin coordonatele folosite in atributul "coords",
coordonate care au fost alese pentru a se potrivi cu desenul. Reperul cel mai
important este lungimea in pixeli din coltul stanga-sus pana in punctele care
formeaza zona dorita.
Codul HTML pentru acest exemplu este urmatorul (studiati cu atentie atributele
folosite si coordonatele scrise; revizuiti si tabelul de mai sus):
<div align="center">
<img src="image_map.gif" alt="Harta de imagini" border="0" width="300"
height="300" usemap="#map1">
<map name="map1">
<area
href="dir/contact.php" alt="Date de contact" title="Date de contact"
shape="rect" coords="6,116,97,184">
<area
href="curs.html" alt="Curs HTML" title="Curs HTML"
shape="circle" coords="251,143,47">
<area
href="../index.html" alt="Pagina principala" title="Pagina principala"
shape="poly" coords="150,217, 190,257, 150,297,110,257">
</map>
</div>
1. Crearea de tabele
Sub-titlu tabelului
- Sub-titlu tabelului "caption" permite specificarea unei linii de text care va
aparea deasupra sau sub tabel, acest lucru este definit de atributul "align" care
poate lua valorile: top (deasupra) bottom (jos)
Exemplu:
<table border="1" cellpadding="2">
<caption align="bottom">acesta este textul</caption>
<tr>
<th>titlu 1</th>
<th>titlu 2</th>
</tr>
<tr>
<td>linia 2- coloana 1</td>
<td>linia 2- coloana 2</td>
</tr>
</table>
- In pagina web apare asa:
titlu 1 titlu 2
- width = specifica lungimea celulei (In pixeli sau procente din lungimea
paginii)
1. Configurarea cadrelor
ROWS
Elementul <FRAME>
Mai jos puteti vedea cum poate fi creata o pagina HTML care sa contina doua
cadre, cel din stnga ocupnd 23% din spatiul paginii iar cel din dreapta 77%
<HTML>
<HEAD>
<TITLE> TITLU PAGINII </TITLE>
</HEAD>
<FRAMESET COLS="23%,77%">
<FRAME SRC="doc1.htm" NAME="left" SROLLING="NO">
<FRAME SRC="doc2.htm" NAME="right" SROLLING="YES">
</FRAMESET>
<BODY>
</BODY>
</HTML>
2. Atributul target
Cand sunt create link-uri care sunt folosite pentru a deschide pagini in cadre,
este nevoie de specificarea unui atribut in eticheta de link "<a>" numit target,
acesta spune browser-ului in ce cadru sa deschida pagina.
Atributul target foloseste ca valoare textul din atributul NAME al elementului
FRAME in care se va deschide noua pagina.
De exemplu, daca avem un link in Meniu.htm care vrem sa deschid pagina
Doc3.htm in spaiul in care se afla celalat cadru, de exemplu Continut.htm;
codul HTML pentru link va arata astfel in Meniu.htm:
target="_top"
target="_blank"
target="_self"
target="_parent"
- Unde "iframe" este elementul principal care indica adaugarea unui frame in
pagina.
- "url_pagina" e adresa paginii care va fi incarcata in iframe, "width" si
"height" reprezinta lungimea respectiv inaltimea cadrului (exprimata in
procente sau pixeli), "scrolling" reprezinta permisiunea de derulare a paginii
din cadru (yes sau no), "frameborder" specifica daca va fi sau nu afisata o
margine (bordura) pentru cadru (1=da, 0=nu), iar "nume_frame" este numele
cadrului (necesar pentru atributul "TARGET" in link-uri sau cand frame-ul este
folosit de JavaScript).
1. Tag-ul FORM
action - aici se scrie adresa URL a unui script de pe server (de obicei PHP
sau CGI), program care trebuie sa accepte datele din FORM , le
proceseaza si trimite napoi raspunsul la browser.
method - aici putem scrie get , sau post. Aceste valori specifica ce
metoda HTTP va fi folosita pentru a trimite continutul formularului la
server.
2. Elementele de formular
Casete de text
- este folosit pentru a crea in pagina un camp pentru text (cu o singura
linie).
In browser va apare:
o type - text
Camp textarea
o wrap - standard este OFF. Dar poate avea valorile : "VIRTUAL" sau
"PHYSICAL", astfel ca textul wraps in browser sa fie prezentat exact
cum este scris de utilizator.
In browser va apare:
o type - password
o type - hidden
Check box
In browser va apare:
o type - checkbox
Radio button
- este folosit pentru adaugarea mai multor optiuni dintre care utilizatorul
poate alege una singura
In browser va apare:
o type - radio
In browser va apare:
o type - file
Buton simplu
In browser va apare:
o type - button
Buton Submit
In browser va apare:
o type - submit
o type - image
Buton Reset
In browser va apare:
o type - reset
Elemente select
1. Drop Down List (Lista de derulare)
o - Codul este:
<select name="select">
<option>Optiune 1</option>
<option>Optiune 2</option>
</select>
In browser va apare:
2. List Box
- Codul este:
<select name="select" size="4">
<option>Optiune 1</option>
<option>Optiune 2</option>
</select>
- unde "name" este atributul care defineste numele acestui tag SELECT,
atributul "size" determina inaltimea elementului select care determina si
numarul de optiuni vizibile initial, iar "<option>" impreuna cu "Optiune 1"
(si 2) reprezinta elementele din lista de selectare.
In browser va apare:
- acesta nu este neaparat necesar, dar nu strica sa-l folositi. Arata autorul
documentului.
Un alt meta tag care este cateodata necesar, dar nu are legatura cu motoarele
de cautare, este "Refresh", acesta are urmatoarea forma:
<meta http-equiv="Refresh"
content="4;url=http://www.nume_site/pagina">
src - Defineste locatia fisierului audio folosit (midi .au sau wav)
Exemplu:
<bgsound src="sunet.midi" loop="3" title="titlul melodiei" derlay="5">
src - Defineste locatia fisierului audio folosit (midi .au sau wav)
Exemplu:
<embed src="sunet.midi" width="145"height="60" autostart="truie"
volume"100" controls="console" hidden="false">
HTML are un tag special, <marquee> </marquee>, prin care puteti crea un
efect de miscare a unui text (sau imagine) care este incadrat de a cest element.
Are urmatoarele atribute:
- In loc de text poate fi folosit si o imagine, inlocuind textul (aici "Marquee text")
cu tagul "<img> pentru imagine.
- Avantajul utilizarii uneia din aceste 2 metode, pentru cei care fac site-uri doar
cu HTML, este faptul ca acelasi continut HTML poate fi inclus in mai multe pagini
din site, fiind scris o singura data. De exemplu, in cazul unui Meniu ce trebuie
afisat in toate paginile site-ului; codul acestuia poate fi scris intr-un fisier special
("meniu.html") apoi, cu una din formulele de mai sus (tag-ul "<iframe>" sau
"<object>") se adauga in fiecare fisier al paginilor, iar la o eventuala modificare
a meniului se va face doar in codul acestuia din "meniu.html".
- Exemplu:
In pagina va apare
Exemplu h4
- Aceasta metoda este utila cand se doreste folosirea acelorasi stiluri pentru mai
multe elemente din pagina astfel sunt scrise o singura data si nu la fiecare
element.
- Proprietatile si valorile de sti CSS se introdul in acest element STYLE, dupa cum
puteti vedea in exemplul urmator:
<html>
<head>
<title>titlu</title>
<style type="text/css">
<!--
h2 {color:blue; text-decoration:underline;}
-->
</style>
</head>
<body>
</body>
</html>
- Conform acestui cod, toate textele "h2" din pagina vor avea culoarea albastra si
vor fi subliniate.
3. Extern
- Aici proprietatile si valorile pentru diverse stiluri sunt specificate intr-un fisier
extern special, de obicei cu extensia "css" (pe care il putem construi cu un editor
de simplu texte gen Notepad).
- Avantajul folosirii fisierelor externe CSS este faptul ca aceleasi coduri de stil pot
fi folosite de mai multe pagini din site, chiar tot site-ul, fiind scrise o singura
a:link {
color:#0000ff;
text-decoration:none;
font-weight:normal;
font-size:15px;
font-family: Arial;
}
a:visited {
color:#008080;
text-decoration:none;
font-weight:normal;
font-size: 15px;
font-family: Arial;
}
a:active {
color:#b54090;
text-decoration:underline;
}
a:hover {
color:#b54090;
text-decoration:underline;
font-weight:normal;
font-size: 15px;
font-family: Arial;
}
p{
font-weight: normal;
font-size: 11pt;
line-height: 12pt;
text-indent: 20px;
font-family: Arial;
}
Pentru a adauga acest stil CSS intr-o pagina web, adaugati in sectiunea HEAD a
documentului HTML care va folosi acel fisier cu stiluri, (intre <head> ...
</head>) urmatoarea comanda:
Se poate face chiar ca un anumit stil sa poata fi aplicat numai unei singure etichete
HTML, iar altul sa poata fi aplicat mai multor etichete HTML de tipuri diferite. Pentru
aceasta se foloseste atributul id sau class in interiorul etichetelor HTML la care vrem
sa aplicam un anumit stil.
Diferenta dintre id si class este faptul ca se poate folosi acelasi atribut "class" pentru
mai multe elemente HTML, pe cand acelasi "id" se foloseste numai pentru un singur
element HTML.
Exemplu pentru "class"
<html>
<head>
<title>Titlul</title>
<style type="text/css">
<!--
.cuvant {
color:#1111fe;
dext-decoration:underline;
}
-->
</style>
</head>
<body>
<h2 class="cuvant">Text ...</h2>
<h3 class="cuvant">Alt text ... </h3>
</body>
</html>
- In exemplu de sus, stilul creat poate fi folosit doar de elementele unde vom adauga
comanda class="cuvant", celelalte elemente nefiind afectate.
- In acest exemplu, stilul creat pentru "idh" va fi folosit doar pentru primul element "h2"
care contine 'id="idh"'
In tabelul de mai jos sunt cateva atribute (sau proprietati) care pot fi modificate cu
STYLE
Atribut Descriere Valori
border-
culoarea chenarului nume sau valoare RGB
color
- Pentru aplicarea unui stil css asupra unei portiuni dintr-un text, se foloseste eticheta
<span> </span>, ca in exemplu urmator:
- in acest exemplu se pot aplica elemente de stil css clasei (.cls) care vor afecta doar
portiunea de text inclusa intre tag-ul "<span>".
DIV si SPAN
Tag-urile <div></div> si <span></span> nu au efecte importante daca sunt
folosite singure.
Chiar daca folosite singure, DIV si SPAN nu au nici un efect major, in combinatie
cu CSS pot crea aspecte grafice importante. Pentru aceasta, ambele pot folosi
atributul style (cu proprietati CSS) ori atributele id sau class ca identificator
pentru stiluri CSS.
Tag-ul <div></div> este unul din cele mai folosite elemente HTML, aceasta
deoarece in combinatie cu proprietati CSS poate crea efecte grafice deosebite,
iar in interiorul lui pot fi incluse oricare elemente HTML: tabele, formulare,
marcatori, linii sau alte DIV-uri. Cadrul in care acestea sunt adaugate poate avea
propriul fundal (background), lungime, inaltime si margini cu diferite linii.
Iata un exemplu in care avem 2 div-uri, unul contine un formular iar celalalt o
lista "<ul></ul>", fiecare DIV cu proria culoare de fundal, dimensiuni stabilite si
margini diferite.
- In atributul "style" sunt specificate proprietatile CSS care stabilesc aspectul grafic al
fiecarui DIV (lungime in pixeli, fundal si bordura).
Acest cod va afisa intr-o pagina web urmatorul rezultat:
Nume:
E-mail:
Alt DIV
Linie 1
Linie 2
Linie 3
Un alt aspect important este si faptul ca putem pozitiona continutul din interiorul tag-
ului <div> </div> oriunde in pagina, folosind proprietati CSS precum:
position - care poate lua valorile: static, relative, fixed sau absolute (pt. mai
multe detalii vezi Pozitionare CSS).
Iata un exemplu in care, prin folosirea mai multor DIV-uri pozitionate suprapus, putem
afisa in pagina un titlu cu aspect grafic deosebit. Codul este urmatorul:
In acest exemplu avem un prim DIV cu atributul "style" in care avem o proprietate de
pozitionare relativa (pt. a pozitiona toate celelalte elemente pe care el le incadreaza
dupa contextul scris anterior) si o alta proprietate pentru marimea textului. In interiorul
acestui DIV avem alte 3 div-uri, pozitionate absolut si care incadreaza fiecare cate un
text identic. Prin pozitionarea absoluta div-urile se suprapun, la o distanta stabilita de
proprietatile "margin-top" si "margin-left", iar prin culoare diferita (cu proprietatea
"color") data textului din fiecare "div" va apare in pagina web urmatorul rezultat:
2. Tag-ul SPAN
- Am adaugat portiunea din context (aici textul "Curs HTML") intr-un tag SPAN pentru a-i
putea aplica proprietatile grafice dorite si care nu afecteaza restul continutului.
- Astfel, prin proprietatile adaugate in "style" (background:#88fe88; si font-
weight:bold;), in pagina web va fi afisat textul in felul urmator:
Tag-ul SPAN poate fi folosit si ca o classa pentru CSS. Astfel, proprietatile adaugate
<html>
<head>
<title>Titlul</title>
<style type="text/css">
span {
border:2px solid red;
padding:1px;
color:#1111fe;
}
</style>
</head>
<body>
<h4>Exemplu de <span>text cu eticheta SPAN</span> in interiorul frazei.</h4>
<ul>
<li>Linia 1</li>
<li><span> Linie 2, in span </span></li>
<li>Linia 3</li>
<li><span> Linie 4, in span </span></li>
<li>Linia 5</li>
</ul>
</body>
</html>
- Observati cum a fost adaugat elementul "span" in tag-ul "<style> </style>" din
sectiunea HEAD a codului HTML. Acest element face referire la toate tag-urile
"<span></span>" din document si le transmite aceleasi proprietati.
- Acest cod va afisa intr-o pagina web urmatorul rezultat:
Linia 1
Linie 2, in span
Linia 3
Linie 4, in span
Linia 5
- Diferenta dintre DIV si SPAN este faptul ca DIV incadreaza o sectiune din
document sub forma unui bloc iar SPAN incadreaza o portiune din context sub
forma de linii.
Iata un exemplu din care se poate intelege mai bine, atribuim aceeasi
proprietate grafica (bordura rosie) unui tag DIV si unui tag SPAN.'
- Acum cu SPAN:
- Observati diferenta, modul in care este afisata bordura. Pentru DIV aceasta incadreaza
exteriorul sectiunii (blocul) div-ului, iar pentru SPAN bordura este afisata pe fiecare
linie.
- De aceea este indicata folosirea tag-ului "<span></span>" pentru continut din
interiorul unei linii.
Tutorial HTML5
Noile caracteristici adaugate in HTML5 sunt bazate pe HTML, CSS, DOM, si
JavaScript; si reduc necesitatea plugin-urilor externe (precum Flash).
<meta charset="utf-8">
- In HTML5 puteti alege sa specificati sau nu atributul type in elementele <script>, and
<style>, acesta a devenit optional:
<script type="text/javascript"><!--
// Cod JavaScript
--></script>
Sau:
<script><!--
// Cod JavaScript
--></script>
<style type="text/css">
/* Cod CSS */
</style>
Sau:
<style>
/* Cod CSS */
</style>
Toate aceste variante sunt valide in HTML5, dar, ca o buna practica, este indicat sa
folositi sintaxa XHTML; adica sa folositi litere mici, sa adaugati slash-ul de inchidere, si
sa specificati atributul "type" in tag-urile <script>, si <style>.
Structura HTML5
<!doctype html>
Tag-ul Meta charset e mai simplu:
<meta charset="utf-8">
Div-urile sunt acum folosite petru stil si design, nu mai sunt necesare pentru structura;
HTML5 include mai multe elemente noi pentru structurare, care ajuta la definirea si
organizarea diferitelor parti in document.
Acestea sunt principalele elemente de structura care sunt folosite mai des in HTML5:
<aside> - poate fi folosit ca sa defineasca o zona laterala, sau alt continut care
e considerat intr-un fel separat de continutul din jurul lui. Un exemplu ar fi,
banner sau publicitate.
<hgroup> - se foloseste pentru a grupa un set de doua sau mai multe elemente
H1, H2, H3, ..., cand avem de exemplu un titlu si subtitluri
HTML5 vine si cu alte elemente interesante, precum <video> si <audio>, plus alte tag-
uri si atribute noi si modificate, dar acest tutorial este o descriere scurta care prezinta
principalele elemente de baza, ca sa intelegeti noua structura in HTML5, si sa treceti
rapid de la HTML4 sau XHTML la HTML5.
Toate principalele browsere (Safari, Chrome, Firefox, Opera, Internet Explorer) continua
sa adauge noile caracteristici HTML5 in ultimile lor versiuni, dar multi utilizatori inca
folosesc versiuni de browser web ce nu recunosc noile elemente HTML5, precum IE7,
IE8. In acest caz exista o solutie JavaScript, un script extern, html5.js (gazduit de un
proiect Google) care face browser-ul IE sa recunoasca noua structura din HTML5.
Este recomandat sa includeti acest script in sectiunea HEAD a documentului HTML5,
folosind acest cod:
<!--[if IE]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><!
[endif]-->
Si urmatorul cod CSS, care face ca tag-urile specificate sa fie afisate ca elemente de tip
bloc:
Iata o structura comuna a unei pagin cu HTML5, ce contine un header in partea de sus
a paginii (cu u meniu in el), o sectiune in partea stanga (cu un meniu de navigare
"aside" pt. banner), o alta sectiune (cu Header, 2 articole si footer), si un footer in
subsolul paginii (click pe imagine):
Document HTML5
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Web Development Cursuri si Tutoriale</title>
<meta name="description" content="Examplu document in HTML5, template, cursuri si
tutoriale" />
<meta name="keywords" content="html5, tutoriale html5, cursuri" />
<!--[if IE]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><!
[endif]-->
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<header id="page_header">
<h1>Web Development Cursuri si Tutoriale</h1>
<nav>
<section id="posts">
<header id="posts_header">
<h2>Tutoriale HTML5</h2>
</header>
<article class="post">
<header>
<h3>Invata rapid HTML5</h3>
</header>
<div class="ctext">
Invata despre noile caracteristici din HTML5.<br />
Tag-uri noi, si elemente pentru structura.
</div>
<aside class="post_baner">Aici poate fi un banner</aside>
<p>
Noile caracteristici din <b>HTML5</b> sunt bazate pe HTML, CSS, DOM, si JavaScript; si
reduc necesitatea plugin-urilor externe (precum Flash).<br />
Multe alte noi caracteristici HTML5 sunt centrate pe crearea unei mai bune platforme pentru
aplicatiile web, <a href="http://www.site-ul-taunet.net/html/tutorial-html5.html" title="Tutorial
HTML5">Cititi mai mult</a> ...
</p>
</article>
<article class="post">
<header>
<h3>Elemente si attribute noi pentru formular in HTML5</h3>
</header>
<div class="ctext">
Formularele HTML sunt folosite in general ca sa transfere date adaugate de utilizator la un
script de pe server sau JavaScript, ca sa fie procesate de un limbaj de programare.
</div>
<p>
HTML5 adauga mai multe tipuri de casute input noi, pentru formular (datetime, datetime-
local, date, month, week, time, number, range, email, url, search, and color), <a
href="http://www.site-ul-taunet.net/html/html5-formular-input-atribute.html" title="Elemente de
formular noi">Cititi mai mult</a> ...
</p>
</article>
<footer id="post_footer">
<p>Mai multe lectii si tutoriale HTML: <a href="http://www.site-ul-tau.net/html/" title="Curs
HTML">Curs HTML</a>.</p>
</footer>
</section>
<section id="sidebar">
<nav>
<ul>
<li><a href="http://www.site-ul-tau.net/html/" title="Curs HTML">Curs HTML</a></li>
<li><a href="http://www.site-ul-tau.net/curs_css/" title="Curs CSS">Curs CSS</a></li>
<li><a href="http://www.site-ul-tau.net/javascript/" title="JavaScript">JavaScript</a></li>
<li><a href="http://www.site-ul-tau.net/php-mysql/" title="PHP-MySQL">PHP-
MySQL</a></li>
<li><a href="http://www.site-ul-tau.net/flash/" title="Flash-ActionScript 3">Flash-ActionScript
3</a></li>
<li><a href="http://www.site-ul-tau.net/jocuri/" title="Jocuri Flash">Jocuri Flash</a></li>
</ul>
<footer id="page_footer">
<p>De la: <a href="http://www.site-ul-tau.net/" title="Cursuri gratuite, Jocuri,
Filme">www.site-ul-tau.net</a></p>
</footer>
</body>
</html>
header#page_header {
width: 100%;
margin: 4px auto;
border: 2px solid blue;
}
header#page_header nav ul {
list-style: none;
margin: 0;
padding: 0;
}
#page_header nav ul li {
display:inline;
margin: 0 20px 0 0;
padding: 1px;
}
section#posts {
float: right;
width: 79%;
background-color: #f1f2fe;
border: 1px solid yellow;
}
section#posts header#posts_header {
background-color: #abcdef;
border: 1px solid green;
}
article.post {
margin:10px;
background-color: yellow;
text-align: left;
}
article.post aside {
float: right;
margin-top: -58px;
width: 250px;
height: 120px;
background-color: #fefefe;
}
article.post p { clear: right;}
section#sidebar {
float: left;
width: 18%;
background-color: #d7d8fe;
Aceste reguli CSS sunt salvate intr-un fisier extern, denumit "style.css", si este inclus in
pagina HTML cu urmatorul cod adaugat in sectiunea HEAD.
- Click pe Examplu structura HTML5, ca sa vedeti cum apare pagina web creata cu
exemplu prezentat mai sus.
Tag-ul canvas
Tag-ul progress
Tag-ul ruby
Tag-ul WBR
Dupa mai multi ani de experienta cu HTML 4 si XHTML, HTML5 a venit cu tag-
uri noi pentru o mai buna structra a documentului si a formularelor, pentru
Tag-ul <video> este un element multimedia folosit pt. a adauga in pagina web
video clipuri si alt continut video.
Tag-ul HTML5 <video> poate folosi aceste atribute:
Exemplu:
<embed src="flash_game.swf" width="150" height="150" />
Tag-ul canvas
<script type="text/javascript">
var canvas=document.getElementById('cvs1');
var ctx=canvas.getContext('2d');
ctx.fillStyle='#0102fe';
ctx.fillRect(0,0,80,80);
</script>
- Textul dintre <canvas> si </canvas> va fi afisat daca navigatorul web nu
recunoaste canvas.
Rezultat:
Tag-ul progress
- Exemplu:
<progress value="33" max="100"></progress>
Rezultat:
Tag-ul ruby
HTML5 adauga mai multe tipuri de casute input pentru formular (datetime, datetime-
local, date, month, week, time, number, range, email, url, search, si color), care sunt
prezentate mai jos:
type="date" - Creaza o caseta de control pentru specificarea datei (an, luna, zi),
precum un calendar. Valoarea initiala (adaugata in atributul "value") trebuie sa fie
furnizata in format data ISO.
type="datetime" - Creaza o caseta input pentru data si ora, care poate fi adaugat
in format ISO date/time, si e trimisa ca fiind in fusul orar UTC.
type="week" - o caseta input pentru anul si numarul unei anumite saptamani din
an (AN-Wnr , nr e numarul saptamanii).
type="search" - Creaza un camp de text special folosit pentru cautare (de ex.
cautare in site, cu un script).
Adaugare transparenta
Desenare linii
Canvas - Text
Canvas - Umbre
Canvas - Gradient
Adaugare imagini
<canvas> este unul din cele mai interesante elemente introduse in HTML5.
Tag-ul <canvas> este destul de simplu, defineste lungimea, inaltimea si un ID
unic. Dar se folosesc o serie de instructiuni JavaScript (denumite generic APIs)
pentru a desena obiecte in canvas.
Exemplu de mai jos arata structura de baza pentru implementare canvas intr-o
pagina web:
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Titlu paginii</title>
<script type="text/javascript">
function draw() {
// preia intr-un obiect tag-ul <canvas>
var canvas = document.getElementById("id_canvas");
</body>
</html>
- Atributele width si height specifica dimensiunile zonei CANVAS in pagina web.
- Important este ID-ul (aici "id_canvas"), acesta se foloseste in JavaScript ca sa fie
preluat tag-ul <canvas> intr-un obiect (cu document.getElementById('ID')), apoi se
aplica functii si proprietati specifice pentru a crea desene care sunt afisate in tag-ul
CANVAS.
<canvas> este un element de tip bloc, poate fi adaugat in oricare alt tag de tip
bloc, precum <p>, <div>, sau in elementele noi de structura introduse in
HTML5: <section>, <article>.
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Canvas patrat albastru</title>
<script type="text/javascript"><!--
function draw() {
var canvas = document.getElementById('cav1');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0101fe';
ctx.fillRect (50, 60, 100, 100);
}
}
- Sintaxa:
Adaugare transparenta
Ca sa adaugati transparenta, definiti culoarea folosind formula: rgba(Red, Green,
Blue, Alpha). "Alpha" e o valoare intre 0 si 1 care reprezinta transparenta.
In urmatorul exemplu adaugam un dreptunghi cu Alpha 0.5. In acest caz definim
culoarea din "fillStyle" pentru dreptunghi folosind rgba() pentru a specifica valoarea de
transparenta ( rgba(220, 223, 0, 0.5) ).
De aseemenea, va fi adaugat un mesaj pt. no-canvas, iar codul JavaScript e scris sub
tag-ul <canvas> (pt. a nu mai folosi window.onload).
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Canvas transparenta</title>
</head>
<body>
<canvas width="200" height="200" id="cav1"></canvas>
<p id="no_cav" style="display:none;">Folositi un browser compatibil-Canvas ca sa vedeti
aceasta zona.</p>
<script type="text/javascript"><!--
function draw() {
var canvas = document.getElementById('cav1');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0101fe';
ctx.fillRect (50, 60, 100, 100);
ctx.fillStyle = "rgba(220,223,0, 0.5);";
ctx.fillRect (90, 105, 100, 80);
}
else {
// face vizibil tag-ul cu text pt. no-canvas
document.getElementById('no_cav').style.display = 'block';
}
}
lineTo(x, y)
Aceasta metoda traseaza o linie de la punctul curent pana la coordonatele (x, y).
Pentru a seta sau muta punctul curent de inceput, se foloseste metoda moveTo().
moveTo(x, y)
- Aceasta metoda creaza, sau muta, punctul de inceput al desenarii, la coordonatele
specificate.
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
Dupa ce ati definit arc-ul de cerc (sau cercul) cu metoda arc(), aplicati:
ctx.stroke(); - ca sa desenati linia de margine.
ctx.fill(); - ca sa adaugati culoarea de umplere.
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
ctx.arc(75,75,50,0,Math.PI*2,true); // Fata
ctx.moveTo(110,75);
ctx.arc(75,75,35,0,Math.PI,false); // Gura
ctx.moveTo(65,65);
ctx.arc(60,65,4,0,Math.PI*2,true); // Ochiul stang
ctx.moveTo(95,65);
ctx.arc(90,65,4,0,Math.PI*2,true); // Ochiul drept
ctx.stroke();
}
else {
// face vizibil tag-ul cu text pt. no-canvas
document.getElementById('no_cav').style.display = 'block';
}
}
Canvas - Text
Exemplu:
<canvas width="200" height="200" id="cav1"></canvas>
<p id="no_cav" style="display:none;">Folositi un browser compatibil-Canvas ca sa vedeti
aceasta zona.</p>
<script type="text/javascript"><!--
function draw() {
var canvas = document.getElementById('cav1');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
Canvas - Umbre
Urmatorul cod deseneaza o sfera albastra, cu o umbra verde avand transparenta 0.5:
<canvas width="200" height="200" id="cav1"></canvas>
<p id="no_cav" style="display:none;">Folositi un browser compatibil-Canvas ca sa vedeti
aceasta zona.</p>
<script type="text/javascript"><!--
function draw() {
var canvas = document.getElementById('cav1');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
Canvas - Gradient
Dupa ce ati creat obiectul pentru gradient, puteti adauga culori in gradient, cu metoda
addColorStop() aplicata acestui obiect. Urmatoarele doua coduri arata cum puteti
crea si folosi gradient.
1) Exempu cu createLinearGradient():
<canvas width="200" height="200" id="cav1"></canvas>
<p id="no_cav" style="display:none;">Folositi un browser compatibil-Canvas ca sa vedeti
aceasta zona.</p>
<script type="text/javascript"><!--
function draw() {
var canvas = document.getElementById('cav1');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
draw();
--></script>
Rezultat:
2) Exemplu cu createRadialGradient():
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
draw();
--></script>
Adaugare imagini
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
draw();
--></script>
Rezultat:
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
Nume ISO
Nume Sintaxa Descriere
Latin-1
Aacute Á Á A ascutit ()
aacute á á a ascutit ()
Acirc   A circumflex ()
acirc â â a circumflex ()
acute ´ ´ accent grav ()
AElig Æ Æ ligatura AE ()
aelig æ æ ligatura ae ()
Agrave À À A grav ()
agrave à à a grav ()
amp & & ampersand (&)
Aring Å Å A cu inel ()
aring å å a cu inel ()
Atilde à à A tilda ()
atilde ã ã a tilda ()
Auml Ä Ä A umlaut ()
auml ä ä a umlaut ()
brvbar ¦ ¦ bara intrerupta ()
Ccedil Ç Ç C sedila ()
ccedil ç ç c sedila ()
cent ¢ ¢ cent ()
copy © © copyright ()
curren ¤ ¤ valuta generala ()
Introducere
Crearea paginilor HTML este un lucru relativ simplu, invatarea etichetelor HTML
si crearea unor imagini ducand la realizarea de pagini web de o complexitate
medie. Odata cu dezvoltarea internetului, site-urile au devenit din ce in ce mai
complexe, cu un numar mai mare de pagini, cerintele privind grafica si
elementele din pagina au devenit mai pretentioase si astfel proiectarea
paginilor web a devenit o sarcina ceva mai dificila.
O problema importanta cand avem un site cu multe pagini este atunci cand
dorim sa facem anumite schimbari in elementele pagini: fondul, grafica sau
Acest curs prezinta elementele de baza CSS si modul de lucru cu "foile de stil",
va invata cum sa adaugati si sa folositi CSS in paginile dv. web.
Tot ce aveti nevoie este un editor de texte simplu, cum ar fi Notepad, si un
navigator, de exemplu Mozilla Firefox, care este gratuit
Pentru a invata cat mai bine elementele prezentate in aceste lectii, exersati
personal fiecare exemplu si proprietate explicata.
Retineti ca acest curs reprezinta un punct de plecare, ne fiind prezentate aici
toate proprietatile si elementele CSS. Pentru o cunoastere mai amanuntita a
acestora, vizitati site-ul www.w3.org, la sectiunile despre CSS.
<html>
<head>
<title>Titlul</title>
<style type="text/css">
obiect_css {
proprietate:valoare;
</head>
<body>
... Continut ...
</body>
</html>
- Observati sintaxa codului CSS. Perechile proprietate:valoare se scriu intre
acoladele obiectului CSS pe care-l definesc, intre "proprietate" si "valoare"
trebuie sa fie un caracter doua-puncte (:) iar la sfarsitul perechii se adauga un
caracter punct-si-virgula (;)
- Cand este adaugat intr-un fisier extern ".css", codul CSS se scrie la fel, dar nu
se mai adauga tag-ul <style>.
- Selectorul HTML
h1 { font-family:"Arial"; font-size:15px; }
- Aici selectorul este "h1".
Definirea unui selector HTML folosind CSS are ca rezultat redefinirea etichetei
HTML. Selectorul si eticheta desi par identice, totusi nu sunt.
- Clasa
- Identificator
CSS permite si definirea unor reguli de stil generale intr-o pagina web. Acest set
de reguli trebuie scris in sectiunea de antet (head) a documentului, in cadrul
tag-ului <style>.
Sintaxa pentru definirea CSS intr-un document HTML, in interiorul etichetei
<head> </head>, este urmatoarea:
<style type="text/css">
selector_1 {proprietate1:valoare1; proprietate2:valoare2; ... }
...
selector_n {proprietate1:valoare1; proprietate2:valoare2; ... }
</style>
Foile de stil pot fi utilizate nu doar la nivel de pagina web, ci si la nivel de intreg
site. Astfel, trebuie creata o foaie de stil externa intr-un fisier separat, de
preferat cu extensia ".css", care poate fi inclus in pagina HTML prin doua
procedee: legatura sau import.
Crearea unei foaie de stil externe se face scriind codul CSS intr-un fisier text cu
ajutorul unui editor de texte simplu (de exemplu Notepad in Windows), sau
specializat in acest sens (precum Notepad++). In fisierul extern creat se adauga
reguli CSS, fara insa ca aceste reguli sa fie incadrate in etichete STYLE.
Dupa ce a fost creata foaia de stil externa, aceasta poate fi folosita de un
document HTML utilizand urmatoarea sintaxa, in interiorul tag-ului <head>
</head>:
<style type="text/css">
@import url(nume_fisier.css);
</style>
2. Definirea selectorilor
selector_HTML { proprietate1:valoare1;
proprietate2:valoare2; ... }
Utilizarea selectorilor de tip clasa ofera posibilitatea configurarii unor stiluri care
se pot aplica doar acelor elemente care sunt etichetate cu clasa respectiva.
Sintaxa generala de definire a unei clase CSS este:
Exista cazul in care o clasa este asociata unui selector HTML, ceea ce inseamna
ca acea clasa poate fi folosita doar cu eticheta HTML respectiva. Pentru a defini
o clasa care sa afecteze in mod direct un anume selector HTML, se foloseste
urmatoarea sintaxa:
#identificator { proprietate1:valoare1;
proprietate2:valoare2; ... }
Identificatorii permit definirea unui element sub forma unui obiect, fiind folositi
doar o singura data in cadrul unei pagini web pentru identificarea tag-ului
respectiv, astfel poate fi manipulat si cu ajutorul functiilor JavaScript.
Numele unui identificator e recomandat sa fie diferit de cuvantele rezervate
JavaScript.
...
<span class="nume_clasa"> ... </span>
...
<span id="span1"> ... </span>
...
<span class="clasa_span"> ... </span>
...
Acum iata cum pot fi definiti acestia in interiorul unei foi de stil:
.nume_clasa { proprietate1:valoare1; proprietate2:valoare2; ... }
#span1 { proprietate1:valoare1; proprietate2:valoare2; ... }
span .clasa_span { proprietate1:valoare1; proprietate2:valoare2; ... }
Mai multe lucruri despre DIV si SPAN puteti invata de aici -> DIV si SPAN.
Daca mai multi selectori folosesc aceleasi definitii css, acestia pot avea aceeasi
lista de elemente, fiind scrisi separat prin virgule. Sintaxa generala pentru
definirea unei liste cu mai multi selectori este urmatoarea:
- Unde "selector1" este selectorul parinte iar "selector2" este selectorul copil.
Lista de selectori imbricati poate fi mai mare de doi, ultimul selector din lista
este cel care primeste toate stilurile incluse in regula si in plus le mosteneste si
pe cele ale parintilor.
Ca si selectorii singuri, selectorii imbricati pot include in lista clase, identificatori
sau selectori HTML.
Toate etichetele HTML, cu exceptia etichetei BODY, au cel putin o eticheta
parinte care le inconjoara. De cele mai multe ori stilurile etichetelor din interior
preiau stilurile etichetelor parinte (exista insa cazuri in care proprietatile nu sunt
mostenite de etichetele imbricate). Acest mecanism se numeste mostenirea
stilurilor.
Prin redefinirea unui selector, eticheta nu-si pierde proprietatile prestabilite,
doar in cazul in care acestea sunt modificate. Astfel proprietatile mostenite pot
fi anulate prin redefinirea acestora in lista de definitii a etichetei imbricate.
Deoarece exista mai multe moduri de a aplica stilurile, pot apare situatii in care
unei etichete sa-i fie aplicate mai multe stiluri. Foile de stil din doua sau mai
multe surse, folosite simultan, pot cauza contradictii. De aceea exista cateva
reguli care determina ordinea executiei (numita si cascada), acestea sunt:
Este bine ca uneori sa fie adaugate comentarii in codul CSS, mai ales in cazul
fisierelor externe. Comentariile ajuta la intelegerea codului, facandu-se astfel
cunoscut, pentru mai tarziu, rolu anumitor elemente din codul CSS.
Comentariile nu au nici un efect si pot fi plasate in jurul regulilor, fiind utile si in
cazul navigatoarelor care nu suporta CSS.
Pentru a adauga comentarii in regulile de stil avem la dispozitie doua modalitati:
In cazul in care comentariul contine mai multe linie, trebuie plasat intre
/* care deschide zona de comentariu si */ care indica sfarsitul
comentariului.
Configurarea fonturilor
Alegerea potrivita a fonturilor si folosirea acestora in cadrul paginilor web este
importanta, poate atrage critici si comentarii din partea vizitatorilor, mai ales
daca formatarea clasica prin scris normal, aldin sau cursiv nu este folosita
sans serif sunt fonturi care nu folosesc serife, fiind indicate pentru
continut text general.
1. Stabilirea fontului
Fontul folosit pentru afisarea unui text poate fi stabilit prin proprietatea "font".
Pentru definirea fontului in cadrul unei reguli, trebuie specificata, dupa
selectorul din cadrul foii de stil, proprietatea font-family urmata de numele
fontului sau a fonturilor (despartite prin virgula). Este bine ca numele fonturilor
sa fie incadrate intre ghilimele simple sau duble, mai ales daca numele acestora
contine spatii.
Forma generala fiind urmatoarea:
- Dupa ultima virgula se pot folosi urmatoarele nume generice de fonturi: "serif",
"sans-serif", "cursive", "monospace" sau "fantasy". Includerea unei asemenea
valori este optionala, insa recomandata.
Iata un exemplu practic:
h1 { font-family:"Arial", "Helvetica", sans-serif }
Cand este specificata o lista de fonturi, navigatorul incearca sa foloseasca
primul font din lista, daca nu este gasit parcurge lista pana in momentul in care
intalneste un font instalat. Daca nu exista fonturi echivalente, textul va fi afisat
cu fontul prestabilit de browser. Daca este specificat un nume generic, textul va
fi afisat cu un font apartinand aceluiasi stil, in cazul in care fonturile specificate
in lista nu sunt disponibile.
Exista posibilitatea folosirii unei palete largi de fonturi in crearea paginilor web,
nu doar a celor din lista limitata a fonturilor compatibile cu navigatoarele.
Solutia consta in inglobarea fontului in cadrul paginii si trimiterea lui in mod
selector { font-size:valoare }
3. Text inclinat
selector { font-style:valoare }
Unde "valoare" poate fi unul din urmatoarele cuvinte: normal, italic sau
oblique
Iata un exemplu:
h1 { font-style:italic; }
Valoarea normal se poate folosi pentru a sterge formatarea cu caractere
inclinate atunci cand aceasta este mostenita.
4. Grosimea fontului
Ingrosarea este una dintre metodele utilizate des pentru scoaterea in evidenta a
unui text. CSS confera mai multa flexibilitate in utilizarea textului ingrosat decat
elementul HTML <b>, prin posibilitatea introducerii unei valori proprietatii font-
weight, dupa cum urmeaza:
In cazul folosiri valorii cuprinse intre 100 si 900, 400 reprezinta valoarea
corespunzatoare textului normal, iar 700 valoarea ingrosarii pentru stilul aldin.
Majoritatea fonturilor nu dispun de noua ponderi, astfel ca daca este specificata
o valoare care nu este disponibila, va fi folosita o alta pondere.
Forma generala pentru stabilirea grosimii fontului este urmatoarea:
selector { font-weight:valoare }
5. Majuscule mici
Majusculele mici sunt folosite de obicei in cadrul titlurilor, ele fiind obtinute prin
convertirea literelor mici in majuscule cu o dimensiune mai mica decat
majusculelor normale. Astfel se obtin cuvinte in care toate literele sunt scrise cu
majuscule insa prima litera este mai inalta decat celelalte.
Stabilirea unei reguli pentru majuscule mici se realizeaza prin utilizarea
proprietatii font-variant cu valoarea small-caps. Prin folosirea valorii normal,
selector { font-variant:valoare }
Deseori este util sa fie precizate toate elementele fontului intr-o singura
definitie.
Pentru a se realiza acest lucru este folosita proprietatea "font" urmata de
valorile pentru celelalte proprietati, separate prin spatiu.
Sintaxa generala este urmatoarea:
Daca o anumita valoare din lista este omisa, navigatorul va folosi valoarea
prestabilita.
Iata si un exemplu practic de folosire a mai multor valori in aceeasi definitie:
h1 { font:"Arial",sans-serif italic small-caps bold 14pt; }
Configurarea textului
Textele alcatuiesc o buna parte din paginile web. Metodele de afisare a textelor
prin controlul nu numai a fontului, dimensiunii si culorilor, ci si prin alte
elemente, pot imbunatati aspectul pagini si pot atrage atentia asupra anumitor
elemente din text.
selector { letter-spacing:valoare }
selector { word-spacing:valoare }
selector { line-height:valoare }
Iata un exemplu in care marim inaltimea liniei cu 50% din dimensiunea fontului:
h1 { line-height:150%; }
selector { text-transform:valoare }
5. Alinierea textului
Un text poate fi aliniat de la marginea din stanga, din dreapta, centrat sau la
ambele margini (stanga-dreapta).
Proprietatea text-align ofera posibilitatea controlului asupra alinierii textului.
Definirea alinierii se face specificand dupa proprietatea text-align una din
valorile: left, right, centersau justify.
Forma generala este:
selector { text-align:valoare }
Proprietatea poate fi aplicata numai elementelor la nivel de bloc (DIV, UL, Hx,
p), valoarea sa implicita fiind in majoritatea cazurilor stabilita la valoarea "left".
Iata un exemplu in care textul din eticheta "h2" este aliniat "stanga-dreapta":
h2 { text-align:justify; }
- In cazul in care alinierea textului este "stanga-dreapta", spatierea cuvintelor si
a literelor se schimba pentru a se obtine linii de aceeasi lungime.
selector { vertical-align:valoare }
Iata un exemplu in care textul din eticheta <span> va aparea ca exponent fata
de textul din stanga-dreapta lui:
span { vertical-align:super; }
7. Formarea paragrafelor
selector { text-indent:valoare }
CSS permite ornarea textului prin scoaterea lui in evidenta in patru moduri:
subliniere, supraliniere, taierea textului cu o linie sau crearea de texte care
clipesc.
selector { text-decoration:valoare }
9. Spatiile albe
selector { white-space:valoare }
1. Configurarea fundalului
a) Culoarea fundalului
selector {background-color:valoare }
b) Imaginea de fundal
selector { background-image:url('adresa_URL'); }
Pe langa posibilitatea afisarii unui element grafic ca fundal, CSS ofera si un mod
de repetare a acestuia.
Pentru a repeta imaginea de fundal se foloseste proprietatea background-
repeat, urmata de o valoare care poate avea una din urmatoarele optiuni:
selector { background-repeat:valoare }
selector { background-attachment:valoare }
selector { background-position:valoare }
Proprietatea color poate schimba culoare oricarui element, fie el text, linie
orizontala sau element de tip formular.
Sintaxa generala pentru utilizarea acestei proprietati este:
selector { color:valoare }
numele culorii - una din cele 16 culori predefinite (red, green, blue,
white, silver, ...)
valoare RGB - sub forma rgb(r, g, b), unde r, g, b pot fi reprezentate prin
numere intregi cuprinse intre 0 si 255 sau procente de rosu, verde si
albastru cu valori intre 0% si 100%.
Iata un exemplu de cod CSS in care culoarea textului din eticheta "h3" este
definita verde:
h3 { color:green; }
selector { margin:valoare/valori; }
Iata un exemplu in care etichetele DIV vor avea distanta pentru marginea de sus
10 pixeli, dreapta 5 pixeli, jos 8 pixeli si in stanga 15 pixeli:
div { margin:10px 5px 8px 15px; }
selector { margin-top:valoare; }
selector { margin-bottom:valoare; }
selector { margin-left:valoare; }
selector { margin-right:valoare; }
Unde
Iata un exemplu in care div-urile vor avea o bordura groasa de 1 pixel, solid si
culoare albastra:
div { border:1px solid blue; }
selector { border-width:valoare; }
Aspectul bordurii poate fi stabilit prin atributul border-style; stilul este aplicat
celor patru margini si este definit astfel:
selector { border-style:valoare; }
Ultimele patru valori sunt reprezentate tridimensional, iar in cazul in care ele nu
sunt acceptate de catre navigator, in locul lor se va folosi valoarea cu linie plina.
selector { border-color:valoare; }
Fiecare latura a chenarului poate avea valori configurate in mod separat (prin
care se stabilesc stilul si culoarea fiecarei borduri din jurul elementului) dupa
cum este prezentat mai jos:
Cand specificati toate cele patru valori, ele sunt aplicate in ordinea: sus,
dreapta, jos, stanga.
Daca specificati doar o valoare, aceasta va fi aplicata tuturor celor patru directii.
Daca specificati doua sau trei valori, atunci valorile care lipsesc sunt copiate
dupa valorile laturilor opuse.
Iata un exemplu in care etichetele DIV vor avea distanta padding: sus 4 pixeli,
dreapta 2 pixeli, jos 3 pixeli si in stanga 2 pixeli:
div { padding:4px 2px 3px 2px; }
selector { padding-top:valoare; }
selector { padding-bottom:valoare; }
selector { padding-left:valoare; }
selector { pading-right:valoare; }
5. Elemente float
selector { float:valoare; }
selector { clear:valoare; }
Unde "valoare" specifica latura in jurul careia este interzisa infasurarea textului
si poate lua valoarea: left, right sau both. Se poate folosi si valoarea "none",
ceea ce are ca efect anularea altor atribute ale proprietatii clear.
De exemplu, daca aveti un DIV pozitionat fortat in dreapta, un paragraful care
urmeaza dupa el va fi afisat in stanga DIV-ului respectiv. Pentru a anula acest
lucru, ca paragraful sa fie afisat sub DIV, se foloseste proprietatea "clear",
precum in exemplul urmator:
#un_div { float:right; }
p { clear:both; }
selector { display:valoare; }
Iata un exemplu in care elementele <li> sunt asezate in linie, iar un element cu
id="un_id" va fi ascuns in pagina:
li { display:inline; }
#un_id { display:none; }
a) Pozitionarea statica
selector { position:static }
b) Pozitionarea relativa
selector { position:relative }
- Elementele pozitionate relativ pot fi mutate din locatia lor folosind proprietatile
"top" si "left" sau "bottom" si "right".
c) Pozitionarea absoluta
- Originea (punctul de coordonate 0,0) este coltul din stanga-sus al ferestrei sau
al obiectului in care este inclus elementul pozitionat absolut.
d) Pozitionarea fixa
selector { position:fixed }
Pot fi utilizate proprietatile top si left sau bottom si right, de asemenea pot
lua si valori negative.
In cazul in care este vorba despre elemente imbricate, acestea vor fi deplasate
solidar cu elementul parinte daca acesta are position:relative.
Iata un exemplu in care o eticheta <h1> este pozitionata la o distanta de 10
pixeli fata de marginile sus si stanga ale unui DIV in interiu caruia se afla:
<style type="text/css">
div { position:relative; }
h1 { top:10px; left:10px; }
</style>
<div>
<h1>Text...</h1>
</div>
In cazul in care pentru acelasi element sunt stabilite atat marginile "top / left"
cat si "bottom / right", rezultatul afisat depinde de navigator, dar in mod
prestabilit se folosesc pozitiile top si left.
4. Pozitionarea in spatiul 3D
Elementele pot primi o a treia dimensiune, si anume asezarea lor in stiva, unele
in raport cu altele.
Amplasarea se face in mod automat, incepand cu valoarea 0 si continuand prin
incrementare cu o unitate, in ordinea aparitiei lor in documentul HTML si relativ
la elementele parinte.
Pentru pozitionarea elementelor in stiva unele peste altele se foloseste
proprietatea z-index. Valoarea acestei proprietati fiind relatia tridimensionala a
elementului in raport cu alte elemente din fereastra.
Sintaxa generala pentru proprietatea z-index este:
selector { z-index:valoare; }
<div class=relativ>
...
<div class=absolut> ... </div>
...
</div>
Pentru a face o pozitionare absoluta a elementului inclus (care are
class="absolut") in elementul parinte (care are class="relativ"), caruia ii definim
o pozitionare relativa; scriem in foaia de stil urmatorul cod:
.relativ {position:relative; top:30px; left:50px; }
.absolut {position:absolute; top:15px; left:0px; }
<div class=absolut>
...
<div class=relativ> ... </div>
...
</div>
Pentru a face o pozitionare relativa a elementului inclus (care are
class="relativ") in elementul parinte (care are class="absolut"), caruia ii definim
o pozitionare absoluta; adaugam in foaia de stil urmatorul cod:
.absolut {position:absolute; top:20px; left:25px; }
.relativ {position:relative; top:10px; left:5px; }
Proprietatea visibility poate controla faptul ca un element sa fie vizibil sau nu.
Chiar daca elementul este invizibil, el va ocupa un spatiu liber in pagina, acolo
unde ar fi trebuit sa fie afisat.
Sintaxa pentru folosirea acestei proprietati este urmatoarea:
selector { visibility:valoare }
Iata un exemplu in urma caruia textul din interiorul etichetei <h1> va fi invizibil:
h1 { visibility:hidden; }
selector { overflow:valoare; }
Pentru definirea proprietatii "overflow" doar pentru una din directii: orizontala
sau verticala; adica bara de derulare sa fie disponibila sau nu doar pentru una
din aceste directii, se poate folosi o alta varianta a acestei proprietati, si anume:
selector { cursor:valoare; }
Pseudo-clase
Pseudo-clasele permit adaugarea de stiluri CSS doar la anumite elemente ale
aceluiasi selector, id sau clasa.
De exemplu, cand definiti un stil pentru un anumit tag HTML sau pentru o clasa,
continutul din toate aceleasi tag-uri sau aceeasi clasa vor avea acel stil, iar daca
doriti sa definiti un stil diferit pentru primul (sau ultimul) din acele tag-uri ori
pentru primul continut definit de aceeasi clasa, puteti realiza asta folosind
active - Adauga un stil unui element cand acesta este activat (actionat
prin click pe el)
first-child - Adauga un stil unui element care este primul din acel tip de
elemente
hover - Adauga un stil unui element cand mouse-ul se afla deasupra lui
last-child - Adauga un stil unui element care este ultimul din acel tip de
elemente
1. Pseudo-clase cu selector
Selectoarele fac referire la tag-urile HTML pe care le denumesc (de ex.: p pentru
<p>, li pentru <li>, div pentru <div>, etc.).
In exemplul urmator este folosit "first-child" pentru paragraf:
2. Pseudo-clase si clase
.test:lang(da) {
color:blue;
}
</style>
</head>
<body>
<ul>
<li class="test">Text in list cu class 1 ...</li>
<li class="test" lang="da">Text in list cu class 2 ...</li>
<li class="test">Text in list cu class 3 ...</li>
</ul>
</body>
</html>
- Observati ca stilul definit pentru ".test:last-child" va fi aplicat doar ultimului
element care are clasa "test", iar "lang(da)" se aplica numai elementului care pe
langa class="test" are si lang="da".
- Rezultatul este acesta:
Iata un alt exemplu in care sunt combinate o clasa (test), un selector (tag <i>)
si "first-child":
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Pseudo-clase - Ex. 4</title>
<style type="text/css">
.test i:first-child {
font-weight:bold
}
</style>
</head>
<body>
<p class="test"><i>Paragraf</i> cu mai multe tag-uri I: <i>text oblic</i>, alt
test <i>oblic</i></p>
<p class="test">Alt paragraf: <i>sir inclinat si bold</i>, alt sir
- Daca doriti ca stilul sa fie aplicat tuturor etichetelor <i> din prima clasa,
scrieti: .clasa:first-child i
- Daca vreti sa fie aplicat numai primului <i> din prima clasa, scrieti:
.clasa:first-child i:first-child
.test:focus {
background-color:#ededfe;
}
</style>
</head>
<body>
<form action="" method="post">
<input type="text" class="test" /><br />
<textarea cols="20" rows="5" class="test"></textarea><br />
<input type="button" value="Buton" id="unid" />
</form>
</body>
</html>
- Stilul CSS definit in acest exemplu face ca atunci cand mouse-ul se afla
deasupra butonului (care are id="unid") acesta sa isi schimbe culoarea de
fundal, iar cand se da click pe zonele de text din formular (care au class="test"),
la fel se modifica culoarea background.
- Rezultatul este urmatorul formular.
1. after
Pentru a adauga un anumit continut (text, imagine, sunet .wav) prin CSS, se
foloseste proprietatea content si valoarea ce reprezinta continutul respectiv:
text se adauga intre ghilimele, iar imagine sau sunet .wav se adauga folosind ca
valoare url(adresa_fisier)
In urmatorul exemplu va fi adaugat un continut text dupa fiecare element
<h4>.
2. before
- De data aceasta continutul "site-ul-tau- " este adaugat imediat in fata si doar primului
element <h4> (precizat prin 'first-child'), dupa cum puteti vedea mai jos:
- Dupa cum puteti vedea in rezultatul de mai jos, prima litera din continutul fiecarui tag
ce are class="test" este de culoare rosie si marime 25px.
First-line aplica un stil CSS doar primei linii din continutul elementului HTML.
Studiati exemplul urmator:
- Rezultatul este urmatorul, comform codului CSS, prima linie din fiecare element cu
class="test" are textul albastru si ingrosat.
In acest tutorial puteti invata cum sa creati Meniu Dublu cu CSS (orizontal si
vertical).
Meniu dublu inseamna ca lista meniului contine inca un Meniu cu alte link-uri
(denumit si Sub-Meniu).
In general, Meniurile sunt create folosind tag-urile <ul> (sau <ol>) si <li> tags.
- Presupunand ca deja stiti CSS si HTML, aplicati /adaptati codurile prezentate
mai jos, personalizandu-le si cu alte elemente CSS, dupa cum doriti sa creati
designul (colturi rotunjite, imagini pt. fundal, etc.).
Pagina personala
+ Tutorialle CSS
+ Tutoriale HTML
Contact
- Codul HTML si CSS de mai jos creaza acest meniu (Proprietatile CSS trebuie
adaugate in zona <head>, sau intr-un fisier ".css"):
<style><!--
#menuv {
width:200px;
border:1px solid blue;
background-color:#daedfe;
padding:2px;
<ul id="menuv">
<li><a href="/" title="Pagina personala">Pagina personala</a></li>
<li> + Tutorialle CSS
<ul>
<li><a href="http://www.site-ul-tau.net/curs_css/css3-background-proprietati-noi.html"
title="CSS3 - Background proprietati">CSS3 - Background proprietati</a></li>
<li><a href="http://www.site-ul-tau.net/curs_css/css3-opacity.html" title="CSS3
opacity">CSS3 opacity</a></li>
</ul>
</li>
<li> + Tutoriale HTML
<ul>
<li><a href="http://www.site-ul-tau.net/html/tutorial-html5.html" title="Tutorial
HTML5">Tutorial HTML5</a></li>
<li><a href="http://www.site-ul-tau.net/html/html5-canvas.html" title="HTML5
canvas">HTML5 canvas</a></li>
<li><a href="http://www.site-ul-tau.net/html/html5-taguri-noi.html" title="HTML5 tag-uri
noi">HTML5 tag-uri noi</a></li>
</ul>
</li>
<li><a href="http://www.site-ul-tau.net/coment/contact.php"
title="Contact">Contact</a></li>
</ul>
Pagina personala
+ Tutorialle CSS
+ Tutoriale HTML
Contact
<ul id="menuv">
<li><a href="/" title="Pagina personala">Pagina personala</a></li>
<li><span> + Tutorialle CSS</span>
<ul>
<li><a href="http://www.site-ul-tau.net/curs_css/css3-background-proprietati-noi.html"
title="CSS3 - Background proprietati">CSS3 - Background proprietati</a></li>
<li><a href="http://www.site-ul-tau.net/curs_css/css3-opacity.html" title="CSS3
opacity">CSS3 opacity</a></li>
</ul>
</li>
<li><span> + Tutoriale HTML</span>
<ul>
<li><a href="http://www.site-ul-tau.net/html/tutorial-html5.html" title="Tutorial
HTML5">Tutorial HTML5</a></li>
<li><a href="http://www.site-ul-tau.net/html/html5-canvas.html" title="HTML5
canvas">HTML5 canvas</a></li>
<li><a href="http://www.site-ul-tau.net/html/html5-taguri-noi.html" title="HTML5 tag-uri
noi">HTML5 tag-uri noi</a></li>
</ul>
</li>
<li><a href="http://www.site-ul-tau.net/coment/contact.php"
title="Contact">Contact</a></li>
</ul>
Meniu Orizontal-Vertical
Pagina personala
Tutorialle CSS
Tutoriale HTML
Contact
/* Link-uri in sub-menu */
#menuv ul li a {
display:block;
margin:0;
font-weight:normal;
padding:1px;
}
#menuv ul li a:hover {
background-color:#fefefe;
text-decoration:none;
font-style:oblique;
}
--></style>
<ul id="menuv">
<li><a href="/" title="Pagina personala">Pagina personala</a></li>
<li>Tutorialle CSS
<ul>
Este simplu, ideea este ca desenele butonului pt cele 3 stari sa fie simetric
asezate in imagine, vertical: top, center, bottom (sus, centru, jos); sau orizontal:
left, center, right (stanga, centru, dreapta). Este indicat ca inaltimea imaginii
(sau lungimea, in functie de cum sunt pozitionate butoanele in imagine) sa se
imparta exact la 3.
</body>
</html>
Rezultat (pozitionati cursorul de mouse pe buton, apoi tineti apasat clic ca sa
vedeti starea "active"):
CoursesWeb.net
</body>
</html>
Rezultat:
site-ul-tau.net
<style type="text/css"><!--
/* Seteaza imaginea pt butoanele din link-uri si proprietatile comune in #menu */
#menu a {
width: 125px;
height: 40px;
display: block;
background: url('buttons.gif');
background-repeat: no-repeat;
text-indent: -9999px; /* Sa nu se afiseze textul din link */
}
<nav id="menu">
<a href="#" title="Add New" id="addnew">Add New</a>
<a href="#" title="Delete" id="delete">Delete</a>
<a href="#" title="Accept" id="accept">Accept</a>
<a href="#" title="Cancel" id="cancel">Cancel</a>
</nav>
Rezultat (pozitionati cursorul de mouse pe buton, apoi tineti apasat clic ca sa
vedeti starea "active"):
Add New Delete Accept Cancel
background-origin
background-clip
background-size
contain - Poza pt. background e marita (sau micsorata) astfel incat sa fie
cuprinsa in zona de continut.
- Exemplu:
<style type="text/css"><!--
#id1 {
width:200px;
height:100px;
border:1px solid blue;
background:url('css3.jpg');
background-size:100px 60px;
background-repeat:no-repeat;
}
#id2 {
width:300px;
height:120px;
border:1px solid #01da02;
background:url('css3.jpg');
background-size:contain;
background-repeat:no-repeat;
}
#id3 {
width:300px;
height:120px;
border:1px solid silver;
background:url('css3.jpg');
background-size:cover;
}
--></style>
Culoare Gradient
background-origin
- Exemplu:
<style type="text/css"><!--
#id1 {
width:350px;
height:120px;
padding:20px;
border:3px solid blue;
background:url('css3.jpg');
background-repeat:no-repeat;
background-color:#bcfede;
background-origin:content-box;
}
#id2 {
width:350px;
height:120px;
padding:20px;
border:3px solid blue;
background:url('css3.jpg');
background-repeat:no-repeat;
background-color:#bcfede;
background-origin:border-box;
}
--></style>
background-clip
Exemplu:
<style type="text/css"><!--
#id1 {
width:350px;
height:120px;
padding:20px;
border:2px solid blue;
background-color:#cdfeda;
background-clip:padding-box;
-webkit-background-clip:padding-box; /* Safari */
}
#id2 {
width:350px;
height:120px;
padding:20px;
border:2px solid blue;
background-color:#cdfeda;
background-clip:content-box;
-webkit-background-clip:content-box; /* Safari */
}
--></style>
- Exemplu:
<style type="text/css"><!--
#id1 {
width:400px;
height:150px;
background-image: url('html_course.jpg'), url('css3.jpg');
background-repeat: no-repeat, repeat-x;
background-position: center top, center bottom;
}
--></style>
CSS3 contine caracteristici noi care permit crearea de colturi rotunjite, umbre la
chenare si folosirea unei imagini pentru aspectul bordurii.
Exemplu:
<style type="text/css"><!--
#id1 {
width:300px;
height:120px;
border:2px solid blue;
border-radius:28px;
}
--></style>
Primele doua valori trebuie adaugate, restul sunt optionale. Daca "blur" sau
marime nu sunt specificate, se considera 0.
Exemplu:
<style type="text/css"><!--
#id1 {
width:300px;
height:120px;
background-color:#bbfeda;
box-shadow: 11px 11px 5px #7878da;
-webkit-box-shadow: 11px 11px 5px #7878da; /* Safari si Chrome */
}
--></style>
CSS3 text-shadow
<h2>Text cu text-shadow</h2>
Rezultat:
Text cu text-shadow
Se pot adauga mai multe umbre la acelasi text, prin adaugarea mai multor liste
de umbre in proprietatea text-shadow, separate prin virgula.
Urmatorul cod amesteca o culoare verde cu una albastra ca sa creeze un efect
de umbra cu aceste culori:
<style type="text/css"><!--
h2 {
/* pt. IE8+ */
filter:progid:DXImageTransform.Microsoft.Shadow(color=#a0a0fe, direction=135, strength=5);
text-shadow: -1px -1px 1px rgba(110,235,155,0.2), 2px 3px rgba(0,0,181,0.2);
}
--></style>
Exemplu:
<style type="text/css"><!--
#id1 {
width:100px;
border:1px solid blue;
word-wrap:break-word;
}
--></style>
CSS3 opacity
Proprietatea opacity seteaza nivelul de opacitate al unui element HTML,
opacity permite modificarea transparentei elementului.
IE8 si versiuni anterioare folosesc o varianta alternativa, proprietatea filter.
- Sintaxa:
filter: alpha(opacity=X); /* pt. IE */
opacity: X;
- X - reprezinta o valoare intre 0 (complet transparent) si 1.0 (fara transparenta).
<div id="cnt">
<div id="trans"></div>
Plasati mouse-ul peste aceasta caseta pentru a vedea efectul de opacitate.
<img src="css3.jpg" alt="CSS3 opacity" width="160" height="98" />
</div>
Rezultat:
Plasati mouse-ul peste aceasta caseta pentru a vedea efectul de
opacitate.
CSS3 transformari 2D
CSS rotate()
Metoda scale()
CSS skew()
transform: metoda(valori);
- Acest tutorial prezinta metodele de transformare in plan 2D: translate(),
rotate(), scale(), skew() .
#idv:hover {
transform: translate(20px, 15px);
-ms-transform: translate(20px, 15px); /* IE 9 */
-webkit-transform: translate(20px, 15px); /* Safari si Chrome */
-o-transform: translate(20px, 15px); /* Opera */
-moz-transform: translate(20px, 15px); /* Firefox */
}
</style>
Demo:
Pozitionati mouse-ul aici.
CSS rotate()
Metoda rotate() roteste elementul HTML, in sensul orelor de ceas daca valoarea
e pozitiva, in sens invers orelor de ceas daca valoarea e negativa.
- Sintaxa:
transform: rotate(grade);
Exemplu. Roteste element cu 60 grade in sensul orelor de ceas.
<style type="text/css">
#idv2 {
width:90px;
height:90px;
background:#b0b1fe;
font-size:17px;
}
#idv2:hover {
transform: rotate(60deg);
-ms-transform: rotate(60deg); /* IE 9 */
-webkit-transform: rotate(60deg); /* Safari si Chrome */
-o-transform: rotate(60deg); /* Opera */
-moz-transform: rotate(60deg); /* Firefox */
}
</style>
Demo:
Metoda scale()
#idv3:hover {
transform: scale(2, 1.5);
-ms-transform: scale(2, 1.5); /* IE 9 */
-webkit-transform: scale(2, 1.5); /* Safari si Chrome */
-o-transform: scale(2, 1.5); /* Opera */
-moz-transform: scale(2, 1.5); /* Firefox */
}
</style>
Demo:
CSS skew()
<div id="idv4">www.coursesweb.net</div>
Demo:
www.coursesweb.net
CSS3 transition
CSS3 transition poate fi utilizat pentru a anima proprietatile CSS, adaugand un
efect de animatie cand se modifica proprietatile CSS ale unui element HTML,
schimband gradual de la un stil la altut.
CSS3 transition are 4 componente:
/* Firefox 4 */
-moz-transition-property: width;
-moz-transition-duration: 1.4s;
/* Safari si Chrome */
-webkit-transition-property: width;
-webkit-transition-duration: 1.4s;
/* Opera */
-o-transition-property: background-color, color;
-o-transition-duration: 1.4s;
}
#iddv:hover {
width:200px;
}
</style>
Demo (Cand cursorul mouse-ului iese din zona elementului, revine gradual la
stilul initial):
Pozitionati mouse-ul pe acest patrat.
.clse:hover {
font-size: 16px;
}
</style>
<ul>
<li class="clse"><a href="http://www.site-ul-tau.net/curs_css/" title="Curs CSS gratuit">Curs
CSS gratuit</a></li>
<li class="clse"><a href="http://www.site-ul-tau.net/html/" title="Curs HTML">Curs
HTML</a></li>
<li class="clse"><a href="http://www.coursesweb.net/" title="Cursuri Programare
Web">Cursuri Programare Web</a></li>
</ul>
Curs HTML
.clsdv {
width:120px;
height:100px;
position:absolute;
top:0;
left:0;
background:#b8b9fe;
transition: background 1.3s, opacity 1.8s, transform 1.4s;
-moz-transition: background 1.3s, opacity 1.8s, -moz-transform 1.4s; /* Firefox 4 */
-webkit-transition: background 1.3s, opacity 1.8s, -webkit-transform 1.4s; /* Safari si Chrome */
-o-transition: background 1.3s, opacity 1.8s, -o-transform 1.4s; /* Opera */
}
1. Forma Trapez
3. Triunghiuri
4. Cerc si Oval
7. Butoane
8. Diamant
9. Ecran TV
10. Clepsidra
11. Ou cu CSS
12. Yin-Yang
14. Alte forme complexe cu DIV si CSS (Prezentare Mesaj, Infinit, Insigna
Panglica, Blazon, Vapor)
34. Cod:
35. <style type="text/css">
36. #rtrapezoid {
37. height: 0;
38. width: 120px;
39. border-bottom: 100px solid #05ed08;
40. border-left: 15px solid #05ed08;
41. border-right: 45px solid transparent;
89. Cod:
90. <style type="text/css">
91. #triangleup {
92. width: 0;
93. height: 0;
94. border-left: 50px solid transparent;
95. border-right: 50px solid transparent;
96. border-bottom: 100px solid blue;
97. }
98. </style>
99.
100. <div id="triangleup"><br/><br/><br/>>Sus</div>
101. Rezultat:
102.
Sus
104. Cod:
105. <style type="text/css">
106. #triangledown {
107. width: 0;
108. height: 0;
109. border-left: 50px solid transparent;
110. border-right: 50px solid transparent;
111. border-top: 100px solid blue;
112. }
113. /* Continut in triunghi */
114. #triangledown div{ margin:-85px 0 0 -20px; }
115. </style>
116.
117. <div id="triangledown"><div>JOS</div></div>
118. Rezultat:
119. JOS
121. Cod:
122. <style type="text/css">
123. #triangleleft {
124. width: 0;
125. height: 0;
126. border-top: 50px solid transparent;
127. border-bottom: 50px solid transparent;
128. border-right: 100px solid blue;
129. }
130. /* Continut in triunghi */
131. #triangleleft div{ margin:-10px 0 0 25px; }
132. </style>
133.
134. <div id="triangleleft"><div>Stanga</div></div>
138. Cod:
139. <style type="text/css">
140. #triangleright {
141. width: 0;
142. height: 0;
143. border-top: 50px solid transparent;
144. border-bottom: 50px solid transparent;
145. border-left: 100px solid blue;
146. }
147. /* Continut in triunghi */
148. #triangleright div{ margin:-10px 0 0 -85px; }
149. </style>
150.
151. <div id="triangleright"><div>Dreapta</div></div>
152. Rezultat:
153. Dreapta
155. Cod:
156. <style type="text/css">
157. #triangletopleft {
158. width: 0;
159. height: 0;
160. border-top: 100px solid blue;
161. border-right: 50px solid transparent;
162. }
163. </style>
164.
165. <div id="triangletopleft">...</div>
166. Rezultat:
167. ...
168.
170. Cod:
171. <style type="text/css">
172. #triangletopright {
173. width: 0;
174. height: 0;
175. border-top: 100px solid blue;
176. border-left: 50px solid transparent;
177. }
178. </style>
179.
180. <div id="triangletopright">...</div>
181. Rezultat:
182. ...
183.
199. Cod:
200. <style type="text/css">
201. #trianglebottomright {
202. width: 0;
203. height: 0;
204. border-bottom: 100px solid blue;
205. border-left: 50px solid transparent;
206. }
207. </style>
208.
209. <div id="trianglebottomright">...</div>
210. Rezultat:
211. ...
214. Cerc
215. <style type="text/css">
216. #circle {
217. width: 180px;
218. height: 180px;
219. background: #abcdef;
220. -moz-border-radius: 50%;
221. -webkit-border-radius: 50%;
222. border-radius: 50%;
223. padding:15px;
224. }
225. </style>
226.
227. <div id="circle"><br/><br/>Cursuri online:<br/>site-ul-tau.net</div>
228. Rezultat:
229.
Cursuri online:
site-ul-tau.net
248. Paralelogram
265. Pentagon
266. Cod:
267. <style type="text/css">
268. #pentagon {
298. Hexagon
299. Cod:
300. <style type="text/css">
301. #hexagon {
302. width: 100px;
303. height: 55px;
304. background: #cdabef;
305. position: relative;
306. }
307. #hexagon:before {
308. content: "";
309. position: absolute;
310. top: -25px;
311. left: 0;
312. width: 0;
313. height: 0;
314. border-left: 50px solid transparent;
315. border-right: 50px solid transparent;
316. border-bottom: 25px solid #cdabef;
317. }
318. #hexagon:after {
319. content: "";
320. position: absolute;
321. bottom: -25px; left: 0;
322. width: 0;
323. height: 0;
324. border-left: 50px solid transparent;
325. border-right: 50px solid transparent;
326. border-top: 25px solid #cdabef;
327. }
328. </style>
334. Octogon
335. Cod:
336. <style type="text/css">
337. #octagon {
338. width: 100px;
339. height: 100px;
340. background: #a0e8a1;
341. position: relative;
342. }
343. #octagon:before {
344. content: "";
345. position: absolute;
346. top: 0;
347. left: 0;
348. border-bottom: 29px solid #a0e8a1;
349. border-left: 29px solid #eee;
350. border-right: 29px solid #eee;
351. width: 42px;
352. height: 0;
353. }
354. #octagon:after {
355. content: "";
356. position: absolute;
357. bottom: 0;
358. left: 0;
359. border-top: 29px solid #a0e8a1;
360. border-left: 29px solid #eee;
361. border-right: 29px solid #eee;
362. width: 42px;
363. height: 0;
364. }
365. </style>
366.
367. <div id="octagon"></div>
371. Cod:
372. <style type="text/css">
373. /* http://css-tricks.com/examples/ShapesOfCSS/ */
374. #star5 {
375. margin: 50px 0;
424. Cod:
425. <style type="text/css">
426. #star6 {
427. width: 0;
428. height: 0;
429. border-left: 50px solid transparent;
430. border-right: 50px solid transparent;
431. border-bottom: 100px solid #05ed08;
432. position: relative;
433. }
434. #star6:after {
435. width: 0;
450. Cod:
451. <style type="text/css">
452. #star8 {
453. background: blue; width: 80px;
454. height: 80px;
455. position: relative;
456. -webkit-transform: rotate(20deg);
457. -moz-transform: rotate(20deg);
458. -ms-transform: rotate(20deg);
459. -o-transform: rotate(20eg);
460. }
461. #star8:before {
462. content: "";
463. position: absolute;
464. top: 0;
465. left: 0;
466. height: 80px;
467. width: 80px;
468. background: blue;
469. -webkit-transform: rotate(135deg);
470. -moz-transform: rotate(135deg);
471. -ms-transform: rotate(135deg);
472. -o-transform: rotate(135deg);
473. }
474. </style>
475.
476. <div id="star8"></div>
477. Rezultat:
478.
480. Cod:
481. <style type="text/css">
482. #star12 {
483. background: blue;
484. width: 80px;
485. height: 80px;
486. position: relative;
487. }
488. #star12:before, #star12:after {
489. content: "";
490. position: absolute;
491. top: 0;
492. left: 0;
512. Rezultat:
513.
Diamant cu CSS
Doua forme tip diamant, create simplu cu un tag DIV si cateva proprietati
CSS.
Cod:
<style type="text/css">
#diamond {
<div id="diamond"></div>
Rezultat:
Diamant 2
Cod:
<style type="text/css">
#diamond {
border-style: solid;
border-color: transparent transparent #0809fe transparent;
border-width: 0 25px 25px 25px;
height: 0;
width: 50px;
position: relative;
margin: 10px 0;
}
#diamond:after {
content: "";
position: absolute;
top: 25px;
left: -25px;
width: 0;
height: 0;
border-style: solid;
border-color: #0809fe transparent transparent transparent;
border-width: 70px 50px 0 50px;
}
</style>
<div id="diamond"></div>
Rezultat:
Ecran TV cu CSS
Forma ecran TV creat doar cu un tag DIV si cateva proprietati CSS.
Cod:
<style type="text/css">
#tvscreen {
position: relative;
width: 200px;
height: 150px;
<div id="tvscreen">site-ul-tau.net</div>
Rezultat:
site-ul-tau.net
Forma de Ou cu CSS
Forma de Ou creat cu un tag DIV si cateva proprietati CSS (fara fisier cu
imagine).
Cod:
<style type="text/css">
/* http://css-tricks.com/examples/ShapesOfCSS/ */
#egg {
display:block;
width: 180px;
height: 240px;
background-color: #09fb09;
/* Continut in egg */
#eggsp div {
position:absolute;
padding:89px 2px 2px 9px;
}
</style>
Yin-Yang cu CSS
Cerc Yin-Yang creat cu un tag DIV si proprietati CSS (fara fisier cu imagine).
Cod:
<style type="text/css">
#yinyang {
width: 100px; height: 50px;
background: #fff;
border-color: #000;
border-style: solid;
border-width: 2px 2px 50px 2px;
border-radius: 100%;
position: relative;
}
#yinyang:before {
content: "";
position: absolute;
top: 50%;
left: 0;
background: #fff;
border: 18px solid #000;
border-radius: 100%;
width: 14px;
height: 14px;
}
#yinyang:after {
content: "";
position: absolute;
top: 50%;
left: 50%;
background: #000;
border: 18px solid #fff;
border-radius:100%;
width: 14px;
height: 14px;
}
</style>
<div id="yinyang"></div>
Rezultat:
<div id="heartsp"></div>
Forma 1
Cod:
<style type="text/css">
#shp1:before {
content: "";
line-height: 0;
font-size: 0;
width: 0;
height: 0;
border-bottom: 28px solid #b1b0fb;
border-left: 14px solid transparent;
position: absolute;
bottom: 0;
left: -14px;
}
#shp1:after {
content: "";
line-height: 0;
font-size: 0;
width: 0;
height: 0;
border-bottom: 28px solid #b1b0fb;
border-right: 14px solid transparent;
position: absolute;
bottom: 0;
right: -14px;
}
</style>
Cursuri Online:
http://www.site-ul-tau.net
Prezentare Mesaj
Cod:
<style type="text/css">
/* http://css-tricks.com/examples/ShapesOfCSS/ */
#talkbubble {
margin: 10px 25px;
width: 200px;
height: 89px;
background: #05fb08;
position: relative;
-moz-border-radius: 14px;
-webkit-border-radius:
14px; border-radius: 14px;
padding: 2px 5px;
}
Cursuri Online:
http://www.site-ul-tau.net
Insigna Panglica
Cod:
<style type="text/css">
#badgeribbon {
position: relative;
background: #08fb09;
height: 100px;
width: 100px;
-moz-border-radius: 50px;
-webkit-border-radius: 50px;
border-radius: 50px;
padding: 2px;
text-align: center;
}
#badgeribbon:before, #badgeribbon:after {
content: "";
position: absolute;
margin-top: 8px;
border-bottom: 70px solid #01fb02;
border-left: 40px solid transparent;
border-right: 40px solid transparent;
top: 70px; left: -5px;
-webkit-transform: rotate(-140deg);
-moz-transform: rotate(-140deg);
-ms-transform: rotate(-140deg);
-o-transform: rotate(-140deg);
}
#badgeribbon:after {
left: auto;
right: -5px;
-webkit-transform: rotate(140deg);
-moz-transform: rotate(140deg);
-ms-transform: rotate(140deg);
-o-transform: rotate(140deg);
}
</style>
<div id="badgeribbon"><br/>site-ul-tau</div>
Rezultat:
site-ul-tau
Cod:
<style type="text/css">
#infinity {
position: relative;
width: 212px;
height: 100px;
}
#infinity:before, #infinity:after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 60px;
height: 60px;
border: 20px solid blue;
-moz-border-radius: 50px 50px 0 50px;
border-radius: 50px 50px 0 50px;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
transform: rotate(-45deg);
}
#infinity:after {
left: auto;
right: 0;
-moz-border-radius: 50px 50px 50px 0;
border-radius: 50px 50px 50px 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
</style>
<div id="infinity"></div>
Rezultat:
Blazon
Cod:
<style type="text/css">
#chevron {
position: relative;
text-align: center;
padding: 12px;
margin: 6px auto;
height: 60px;
width: 200px;
}
#chevron:before {
content: "";
position: absolute;
top: 0;
left: 0;
height: 100%;
<div id="chevron"></div>
Rezultat:
CSS polygon
Vapor
Cod:
<style type="text/css">
#ship {
margin:30px 0 5px 20px;
position: relative;
width: 200px;
border-width: 50px 28px 0;
border-style: solid;
border-color: #ccddef transparent;
font-weight: bold;
}
#ship:before {
content: "";
position: absolute;
height: 0;
width: 0;
top: -85px;
left: -15px;
border-width: 0 45px 35px;
border-style: solid;
border-color: transparent transparent #bbcdef;
}
/* Content */
#ship div{
position:absolute;
top:-30px;
}
</style>
<div id="ship"><div>www.CoursesWeb.net</div></div>
Demo:
PHP este una dintre cele mai interesante tehnologii pentru site-uri si programare
web, imbina caracteristici dintre cele mai complexe cu simplitatea n utilizare.
PHP a devenit un instrument de frunte pentru dezvoltarea aplicatiilor Web. Spre
deosebire de alte instrumente pentru aplicatii Web, cum este Perl, PHP este un
limbaj de programare comod pentru ncepatori, chiar si pentru cei care nu au
mai desfasurat activitati de programare.
Secventele de cod PHP pot fi incluse intr-un fisier HTML; ulterior serverul Web va
identifica aceasta secventa de cod , va procesa acesta secventa de cod
generand cod HTML iar la final va inlocui secventa de cod PHP cu codul HTML.
Un script PHP poate fi foarte simplu sau foarte complex. Totusi, scrierea chiar si
a unui script PHP complex este relativ simpla, necesitand doar un editor de
texte obisnuit. In aceasta lectie veti invata modul de creare si de executare a
programelor PHP, veti invata sa creati scripturi PHP simple, care afiseaza in
navigatorul web un text simplu. De asemenea, veti invata sa va documentati
scripturile, astfel incat dumneavoastra si alte persoane sa puteti intelege rapid
scopul si structura acestora.
Mai intai trebuie sa instalati un server web (Apache) si modulul pt. limbajul PHP,
acestea sunt gratuite, le puteti gasi pe net si instala pe fiecare, dar pentru
incepatori e recomandat un program care le are deja configurate (si cu MySQL),
precum WampServer, sau sa incarcati scriptul pe un server web unde este
instalat PHP.
Daca nu aveti deja instalat PHP, descarcati de aici -> WampServer, dezarhivati
si instalati programul. (cand este pornit, veti observa o iconita specifica in
colltul cu ceasul).
Fisierele .php in care veti scrie scripturile trebuie sa le salvati in directorul www
din "wamp", apoi, ca sa le testati scrieti in browser adresa
http://localhost/fisier.php
Fiecare program PHP include doua linii speciale, care indica serverului PHP ca
textul cuprins intre cele doua linii este alcatuit din instructiuni PHP. Practic,
aceste linii pot fi asimilate copertelor unei carti, care pastreaza unitatea
programului dumneavoastra PHP. Intre aceste doua linii vor fi scrise
instructiunile PHP. Pentru a incepe sa scrieti un program PHP, deschideti editorul
dumneavoastra de texte si introduceti urmatoarele doua linii :
<?php
?>
Executa prelucrari ale datelor, respectiv obtine accesul la datele stocate in fisiere
si baze de date si le manipuleaza.
Primele doua operatii sunt oarecum mai dificil de realizat decat cea de-a treia.
Totusi, afisarea datelor astfel incat acestea sa fie vizibile utilizatorului este o
operatie foarte simpla. Asa cum paragrafele unui text scris sunt compuse din
propozitii, programele PHP sunt alcatuite din instructiuni. Regulile care
controleaza formarea propozitiilor se numesc sintaxa. Acelasi termen este folosit
si pentru a desemna regulile care guverneaza formarea instructiunilor PHP.
Iata un exemplu pentru crearea instructiunii PHP care trimite date de iesire la un
browser Web, astfel incat acestea sa fie vizibile pentru un utilizator:
<?php
echo "scrieti aici un text oarecare";
?>
<?php
echo "<h2> Iata vine-un sol de pace</h2>";
?>
- Ca sa vedeti rezultatul, salvati fisierul cu acest cod in directorul www din "wamp", de
exemplu cu denumirea teste.php si apelati in browser adresa
http://localhost/teste.php (programul WampServer trebuie sa fie pornit).
In browser va aparea :
Pot fi incluse si scripturi mai complicate ce contin zeci sau chiar sute de linii,
atata timp cat acestea sunt incluse intre cele doua linii specifice limbajului PHP:
<?php
?>
<?php
// Script de la site-ul-tau.net
// Acest script afiseaza un mesaj vizibil pentru utilizator.
echo "Acesta este un script foarte simplu.";
?>
<?php
// Script test
// Acest script afiseaza un mesaj vizibil pentru utilizator.
</body>
</html>
In browser va aparea:
Aceste doua mari categorii de date: numere si siruri, formeaza opt tipuri
principale de variabile :
- Boolean
- Integer
- Float
- String
- Array
- Object
- Resource
- Null
1. Tipul boolean
Variabilelele de tipul boolean pot lua doar doua valori : FALSE sau TRUE
. Tipul integer
Valorile minime, respectiv maxime pe care le poate lua o variabila de tip integer
depind de sistemul de operare pe care ruleaza modulul PHP. De exemplu pentru
un sistem Windows valoarea unui integer se memoreaza pe 32 de biti: 31 bit
pentru numar si un bit pentru semn. In acest caz valorile unui intreg se afla in
intervalul :-231 repectiv: 231. Daca incercam sa folosim un integer cu valori care
ies din acest inteval vor avea de-a face cu un fenomen de depasire : integer
overflow. In acest caz interpretorul PHP converteste acesta valoare intr-o
valoare de tip float (care are un interval mai extins de valori).
3. Tipul float
4. Tipul string
Daca dorim ca sirul sa contina caracterul ' va trebui sa inseram inaintea lui
caracterul escape \. Daca dorim ca sirul sa contina caracterul \ va trebui sa
dublam acest caracter. Acest comportament este exemplificat in exemplul
urmator:
<?php
$var1 = 'Acesta este un sir de test';
echo 'Curs \'PHP\'';
echo '<br />Vrei sa stergi C:\\*.* ?';
echo '<br />Variabila var1=$var1';
echo "<br />Variabila var1=$var1";
?>
In browser va aparea:
Curs 'PHP'
Vrei sa stergi C:\*.* ?
Variabila var1=$var1
Variabila var1=Acesta este un sir de test
Daca intr-un sir delimitat prin ghilimele duble vrem ca acesta sa afiseze numele
unei variabile, nu valoarea acesteia, adaugam un caracter backslash (\) inaintea
numelui variabiei.
Exemplu; echo "Numele variabilei este \$var";
Acest cod va afisa Numele variabilei este $var, oricare ar fi valoarea
variabilei "$var".
Caracterele care alcatuiesc sirul sunt incluse ntre ghilimele duble (" ");
De exemplu, sirul reprezentnd numele fizicianului care a formulat teoria
relativitatii este "Albert Einstein". Asa cum s-a explicat, un sir poate contine
date numerice; de exemplu, "3.14159".
Daca se doreste adaugarea de ghilimele duble intr-un sir delimitat de ghilimele
duble, se adauga caracterul \ in fata acestora.
Exemplu; echo "Numele programului este \"PHP\".";
Prin delimitarea cu ghilimele duble PHP faciliteaza includerea n siruri a unor
caractere speciale, precum caracterele de salt la linie noua sau retur de car, prin
furnizarea de secvente escape care reprezinta caractere speciale.
Iata secventele escape folosite n PHP:
\\ - backslash
\$ - simbolul dolarului
Ca exemplu, iata un sir care include un retur de car, urmat de un salt la linie
noua: "Salut, lume!\r\n".
<?php
$nume = 'Popescu';
$prenume='Costel';
echo 'Numele de familie este '.$nume. 'iar prenumele este '.$prenume;
?>
In anumite situatii este necesar sa accesam unul dintre caracterele unui sir.
Pentru aceasta putem folosi parantezele{} ca in exemplul de mai jos:
<?php
$var1 = 'Acesta este un sir de test';
echo $var1{0}; // Afisaza A (primul caracter din sir)
echo $var1{2}; // Afisaza e (al treilea caracter din sir)
?>
Rezultatul afisat va fi
Ae
<?php
$var1 = <<< EOT
Exemplu de sir care foloseste delimitatorul heredoc.
EOT;
echo $var1;
?>
5. Tipul array
<?php
$fructe[0] = 'mere';
$fructe[1] = 'caise';
6. Tipul object
Reprezinta de fapt instanta unei clase declarate in PHP. O clasa este o structura
care contine variabile membru si functii membru.
Variabilele de tip object si lucrul cu acestea vor fi prezentate detaliat in lectiile
urmatoare.
7. Tipul resource
Este un tip special de variabila care pastreaza o legatura spre resurse externe.
Exemple de resurse externe: manipulatori pentru deschidere de fisiere,
conectare la baze de date, compresia fisierelor, resurse COM, etc...
8. Tipul NULL
Putem afla tipul unei variabile folosind functia gettype() care returneaza un
string (sir) continand tipul variabilei cercetate.
Observati si studiati exemplul de mai jos
<?php
$var1 = TRUE;
$var2 = 100;
$var3 = 23.88;
$var4 = "Nume";
$var[5] = "fructe";
echo gettype($var1);
echo '<br />'.gettype($var2);
echo '<br />'.gettype($var3);
echo '<br />'.gettype($var4);
echo '<br />'.gettype($var[5]);
echo '<br />'.gettype($var6);
?>
In browser va aparea:
Observati ca utima linie afisata este NULL, asta deoarece $var6 nu are nici o
valoare determinata
1. Valori si variabile
$var
$Numar
$_elemente
Pentru a asocia o valoare unei variabile, veti scrie cu un semn egal, asa:
$temperatura = 33.5;
Semnul egal este urmat de valoarea care urmeaza a fi atribuita variabilei, in
acest exemplu, valoarea este data de valoarea literala dubla (float) 33.5.
Caracterul punct si virgula (;) marcheaza sfarsitul instructiunii.
De asemenea, puteti atribui valoarea unei variabile catre o alta variabila, prin
scrierea unei instructiuni de atribuire astfel:
$castigator = $nume;
In acest caz, valoarea variabilei $nume devine valoarea variabilei $castigator.
Acest procedeu se numeste. Astfel o modificare facuta asupra lui $nume se va
propaga automat si asupra variabilei $castigator.
Iata exemplul de mai sus asa cum va aparea intr-un script PHP simplu :
Forma valorii unei variabile se numeste tipul variabilei. Tipul unei variabile se
poate modifica daca atribuiti variabilei o valoare de un tip diferit fata de cel al
valorii curente a variabilei.
De exemplu, instructiunea de atribuire
$x = 3;
Atribue variabilei $x tipul integer.
Daca instructiunea de atribuire
$x = 3.5;
va fi executata ulterior, variabila $x devine de tip float.
Variabilele declarate mai sus sunt definite de utilizator. In PHP exista si alte
variabile numite "variabile predefinite" care rezida in nucleul PHP, sunt alocate
automat de catre modulul PHP, si sunt accesibile in program.
In continuare enumeram citeva dintre aceste "Variabile Superglobale"
(accesibile din toate scripturile PHP):
$_POST variabile furnizate scriptului prin metoda HTTP POST (in general
prin formulare)
2. Operatori
$a + $b Adunare : a+b
$a - $b Scadere : a-b
$a * $b Inmultire: a*b
$a / $b Impartire: a/b
$a%$a Moule :restul impartirii lui a la b
$a +=$b Echivalent cu: $a = $a + $b
$a -=$b Echivalent cu: $a = $a - $b
$a *=$b Echivalent cu: $a = $a * $b
$a /=$b Echivalent cu: $a = $a / $b
$a++ Incrementare ; Ecivalent cu $a = $a +1
$a-- Decrementare; Echivalent cu $a = $a -1
<?php
$var1 = 'Ionescu';
echo 'Numele candidatului este '.$var1;
$var2 = 'Candidat: ';
$var2 .= $var1;
echo "<br />$var2";
?>
Rezutatul afisat va fi:
Numele candidatului este Ionescu
Candidat: Ionescu
3. Functii
In afara de operatori, PHP include functii care executa operatii utile. Iata unele
exemple de functii:
Majoritatea functiilor necesita una sau mai multe valori de intrare, cunoscute
sub numele de argumente. De exemplu, functia "sqrt" necesita un argument
(aici este 'x') care specifica valoarea a carei radacina patrata trebuie calculata.
Numele functiei
Iata un exemplu simplu care foloseste o functie pentru calculul lungimii laturilor
unui patrat, daca este cunoscuta aria patratului:
$latura=sqrt($arie);
Retineti modul in care argumentul functiei este inclus intre paranteze, precum si
modul in care functia si argumentul sau sunt folosite intr-un mod asemanator cu
o valoare literala sau o variabila.
Iata un exemplu care prezinta modul de utilizare a functiei "max", care preia mai
multe argumente:
In browser se va vedea:
Nume:
Atributul "method" poate avea doua valori : GET si POST. Diferenta intre
metodele GET si POST consta in modul in care informatia din formular este
transmisa scriptului care o prelucreaza.
- Metoda GET trimite toate informatiile adunate ca parte a adresei URL; aceste
informatii sunt vizibile pentru utilizator.
- Metoda POST transmite informatia intr-o maniera invizibila pentru utilizator si
http://www.site-ul-tau.net/script.php?nume=Popescu
http://www.site-ul-tau.net/script.php
Metoda GET permite transmiterea unui volum limitat de informatii catre server;
de asemenea nu este recomandata folosirea acestei metode in cazul in care
dorim sa transmitem date personale(de exemplu parolele introduse intr-un
formular pot fi vizualizate de oricine in browserul de Web).
In general datele din formular sunt preluate de scriptul PHP prin urmatoarea
formula:
<?php
$nume = $_POST['nume'];
$email = $_POST['email'];
$parola = $_POST['parola'];
Nume:
Email:
Parola:
Completam datele din formular, de exemplu: la Nume : Popescu, la Email :
[email protected] si Parola : parola_mea
Dupa ce am competat datele, apasam clic pe butonul "Trimite datele", acestea
vor fi trimise la scriptul PHP "test-form.php", care le va prelucra si va afisa
urmatorul rezultat:
Nume = Popescu
E-mail = [email protected]
Parola = parola_mea
Deoarece cunoastem metoda prin care trimitem datele catre scriptul PHP,
"POST", am folosit variabila PHP globala _POST pentru a prelua datele din
formular:
$_POST['nume']
$_POST['email']
$_POST['parola']
Variabile PHP globale: _GET si _POST reprezinta de fapt variabile de tip array,
fiecare element se poate accesa prin cheia sa; in cazul nostru cheia fiecarui
element este data de atributul : NAME al casetelor din formular
http://www.site-ul-tau.net/fisier.php?
nume1=valoare1&nume2=valoare2
$var1 = $_GET['nume1']
$var2 = $_GET['nume2']
Unde "nume1" si "nume2" sunt numele variabilelor din adresa URL, iar "$var1"
si "$var2" sunt variabilele care vor fi folosite in scriptul PHP (din "fisier.php") si a
caror valori vor fi "valoare1" respectiv "valoare2" continute in adresa URL.
Daca doriti sa trimiteti unui script, prin intermediul adresei sale URL, caractere
speciale precum un semn al intrebarii, un semn egal sau un ampersand, se
poate crea confuzie.
Pentru a functiona corect, un sir trebuie sa fie codificat URL. Pentru a codifica
URL un sir, caracterele speciale se nlocuiesc cu echivalentele lor hexazecimale,
precedate de un simbol procent (%). Pentru alte detalii, consultati lectia despre
Utilizarea caracterelor speciale, subtitlul 4 ( Conversia adreselor URL).
De exemplu, forma codificata URL a sirului "la multi ani!" este %22la multi ani
%21%22.
Adresa URL rezultanta se numeste "sir de interogare" si nu poate contine spatii.
Daca doriti sa trimiteti un spatiu ca parte a unui sir de interogare, trimiteti n
locul spatiului un semn plus (+). Iata un exemplu de sir de interogare care
codifica numele autorului acestui site:
http://www.site-ul-tau.net/script.php?autor=Mar+Plo
Unele dintre cele mai comune caractere speciale si echivalentele lor codificate
URL sunt prezentate n tabelul de mai jos:
Caracter Echivalentul codificat
special URL
. *%2e
> %3e
^ %5e
~ %7e
+ %2b
, %2c
/ %2f
: %3a
; %3b
<?php
$ip = $_SERVER['REMOTE_ADDR'];
echo "Adresa dv. IP este $ip";
?>
Uneori, n locul datelor de iesire ale scriptului dumneavoastra, puteti vedea unul
din urmatoarele:
De exemplu, iata un script care contine un tip de eroare frecvent ntlnit. Puteti
identifica eroarea?
<?php
// Acest script contine o eroare de sintaxa
echo "Salut, World Wide Web!;
?>
3. Tratarea erorilor
Modulul PHP poate fi configurat astfel incat sa afiseze erorile intilnite in codul
PHP. Acest lucru poate fi foarte util in cazul depanarii programelor. Pentru a
activa afisarea erorilor exista doua metode:
In exemplul de mai sus daca variabila cu nume: "var" nu exista PHP va afisa un
mesaj de eroare de genul:
Exemplu:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL & ~E_NOTICE);
n aceasta lectie vom discuta despre constante si variabile dinamice. Puteti scrie
programe PHP utile si complexe fara a utiliza constante sau variabile dinamice.
Daca utilizarea constantelor poate facilita citirea programelor dumneavoastra,
variabilele dinamice au un efect contrar. Din acest motiv, n general se
recomanda evitarea variabilelor dinamice, mai ales de catre programatorii PHP
ncepatori. Totusi, va puteri afla n situatia de a lucra la un program PHP scris de
o persoana care foloseste aceste variabile; prin urmare, trebuie sa aveti
cunostinte despre variabilele dinamice, indiferent daca le folositi sau nu n
propriile dumneavoastra programe.
1. Utilizarea constantelor
O constanta este pur si simplu o valoare care este... constanta, cu alte cuvinte o
valoare care nu se modifica, n acest sens, constantele sunt opusele variabilelor,
deoarece valoarea unei variabile se poate modifica pe durata executiei unui
program.
Pentru a defini o constanta, folositi functia define().
Sa consideram urmatorul exemplu:
define("PI", 3.14159);
<?php
$oameni_buni = 12;
$film = "oameni_buni";
echo $$film;
?>
O variabila dinamica este denumita folosind doua simboluri ale dolarului ($$) si
este asociata cu o variabila obisnuita care are un nume similar si include un
singur simbol al dolarului.
In exemplul de mai sus, variabila dinamica $$film este asociata cu variabila
obisnuita, dar cu aceasi nume, $film.
Valoarea unei variabile obisnuite da numele (fara un simbol al dolarului) unei a
doua variabile ordinare, n exemplu nostru, a doua variabila obisnuita este
$oameni_buni. Valoarea acestei a doua variabile obisnuite este valoarea
variabilei dinamice: n exemplu, aceasta este valoarea 12. Deci valoarea
variabiei dinamice $$film, si care va fi afisata de functia "echo" este 12.
O variabila dinamica nu contine, practic, propria sa valoare. n schimb, contine
amplasamentul unde se poate gasi valoarea; cu alte cuvinte, numele unei alte
variabile.
Daca variabilele dinamice vi se par derutante, asa e, variabilele dinamice sunt
$x = 1;
$y = 2.5;
$z = $x+$y;
echo $z;
$x = 1;
echo $y
Daca preferati, puteti prelua controlul conversiei tipului variabilei sau puteti
modifica tipul unei variabile. Pentru a prelua controlul conversiei de tip, puteti
converti fortat un operand de la un tip la altul, proces cunoscut sub numele de
"conversie fortata de tip" sau pur si simplu conversie fortata.
n continuare, este dat un exemplu unei astfel de conversie de tip, unde puteti
vedea modul de efectuare a acesteia:
$x = 1;
$y = 2.5;
$z = $x + (int)$y;
echo $z
<?php
$x = 1.5;
$y = intval($x);
echo $x;
Nici conversia normala si nici cea fortata nu modifica tipul unei variabile.
Ambele mecanisme determina tratarea variabilelor doar in expresia respectiva
ca si cum ar fi de un alt tip.
Totusi, modificarea tipului unei variabile este posibila prin utilizarea functiei
settype().
Acest procedeu este ilustrat n urmatorul exemplu:
$x = 1.5;
settype($x,"integer");
"integer"
"double"
"string"
"array"
"object"
1. empty($var)
<?php
$var = '0';
if (empty($var)) {
echo '$var are valoare nula sau zero';
}
?>
2. floatval($var)
<?php
$var = '123.456';
echo floatval($var); // 123.456
?>
3. get_defined_vars()
<?php
$arr = get_defined_vars();
print_r($arr["_POST"]); // Returneaza toate variabilele $_POST
?>
4. get_resource_type(resursa)
<?php
$c = mysql_connect();
echo get_resource_type($c); // mysql link
5. gettype($var)
<?php
$var1 = 8;
echo gettype($var1); // integer
$var2 = "8";
echo gettype($var2); // string
$var3 = array(8=>'http://www.site-ul-tau.net');
echo gettype($var3); // array
$var4 = true;
echo gettype($var4); // boolean
?>
6. intval($var)
<?php
$var1 = 8.9;
echo intval($var1); // 8
$var2 = "08";
echo intval($var2); // 8
$var3 = -7.8;
echo intval($var3); // -7
?>
7. is_array($var)
<?php
$lectii = array('http://www.site-ul-tau.net', 'php', 'html', 'css');
if (is_array($lectii)) {
echo '$lectii e o matrice';
}
?>
8. is_bool($var)
9. is_float($var)
<?php
$nr = 78.9;
if (is_float($nr)) {
echo '$nr e un numar cu zecimale';
}
?>
10. is_int($var)
<?php
$nr = 78;
if (is_int($nr)) {
echo '$nr e un numar natural';
}
?>
11. is_null($var)
- Returneaza TRUE daca "$var" are valoarea nula, in caz contrar, FALSE.
<?php
$var = null;
if (is_null($var)) {
echo '$var are valoarea NULL';
}
?>
12. is_numeric($var)
- Returneaza TRUE daca "$var" e un numar (cu sau fara zecimale), in caz
contrar, FALSE.
<?php
$nr = 078.9;
if (is_numeric($nr)) {
echo '$nr e un numar';
}
?>
- Returneaza TRUE daca "$var" e o variabila de tip obiect, in caz contrar, FALSE.
<?php
// Se creaza o functie de lucru
function get_vars($obj) {
// Daca variabila $obj e un obiect, returneaza tipul de valori din ea
if (is_object($obj)) {
return var_dump($obj->get_vars);
}
else {
return '$obj nu e de tip obiect';
}
}
14. is_string($var)
<?php
$var = 'sir test';
if (is_string($var)) {
echo '$var e un sir';
}
?>
15. isset($var)
<?php
$v = '';
if (isset($v)) {
echo 'Variabila exista';
}
?>
16. print_r(array)
- Afiseaza un sir care prezinta cheile si elementele dintr-o matrice (array). Daca
parametru "array" e un sir sau numar, va afisa valoarea lui.
17. serialize($var)
<?php
$aray = array('site'=>'www.site-ul-tau.net', 'php'=>'tutoriale');
18. unserialize(sir)
<?php
// Se creaza o clasa simpla
class test {
public $nr = 8;
- Seteaza tipul variabile "$var" in "tip", acesta poate fi unul din urmatoarele
siruri: "boolean", "integer", "double", "string", "array", "object", "NULL".
Returneaza TRUE in caz de succes, altfel, FALSE.
<?php
$var = 7.8;
echo gettype($var); // double
20. strval($var)
<?php
$var = 7*8;
echo strval($var); // 56 (sir)
?>
21. unset($var)
<?php
$aray = array('key'=>'test', 'php'=>'functii');
print_r($aray); // Array ( [key] => test [php] => functii )
22. var_dump($var)
<?php
$aray = array('key'=>'test', 'php'=>'functii');
var_dump($aray); // array(2) { ["key"]=> string(4) "test" ["php"]=>
string(7) "functii" }
<?php
$aray = array('key'=>'test', 'php'=>'functii');
$get_var = var_export($aray, true); // Exporta structura lui $aray, ca sir, in alta
variabila
echo $get_var; // array ( 'key' => 'test', 'php' => 'functii', )
Puteti folosi operatorii logici pentru compararea sirurilor; cu toate acestea, un sir
care apare ntr-o expresie conditionala este convertit la o valoare numerica
nainte de evaluarea expresiei. Deseori, se ajunge la rezultate neasteptate, n
general, valorile sirurilor trebuie sa fie comparate folosind o functie de
comparare a sirurilor; aceste functii vor fi explicate n lectiile urmatoare.
Operatori logici
Operator Descriere
- TRUE daca valoarea lui $a este mai mica dect
$a < $b
valoarea lui $b.
- TRUE daca valoarea lui $a este mai mare dect
$a > $b
valoarea lui $b.
- TRUE daca valoarea lui $a este mai mare sau egala cu
$a >= $b
valoarea lui $b
- TRUE daca valoarea lui $a este mai mica sau egala cu
$a <= $b
valoarea lui $b
- TRUE daca valoarea lui $a este egala cu valoarea lui
$a = $b
$b.
- TRUE daca $a si $b sunt identice; cu alte cuvinte, daca
$a == $b
$a si $b au acelasi tip si aceeasi valoare
- TRUE daca valoarea lui $a este diferita de valoarea lui
$a != $b
$b
$a !== - TRUE daca $a si $b nu sunt identice; cu alte cuvinte,
$b daca $a si $b nu sunt de acelasi tip si aceeasi valoare
$x AND
- TRUE daca att $x, ct si $y sunt adevarate
$y
$x && $y - TRUE daca att $x, ct si $y sunt adevarate.
- TRUE daca minimum una din expresiile $x sau $y este
$x OR $y
adevarata.
- TRUE daca minimum una din expresiile $x sau $y este
$x || $y
adevarata.
$x XOR - TRUE daca numai una din expresiile $x sau $y este
$y adevarata.
!$x - TRUE daca $x este FALSE
NOT $x - TRUE daca $x este FALSE
Observati ca PHP foloseste doi operatori logici care executa aceeasi operatie
(AND si &&) respectiv (OR si ||).
Cu toate acestea, operatorii difera din punctul de vedere al precedentei -
caracteristica care determina ordinea n care sunt executate operatiile n timpul
evaluarii expresiilor. Operatorii && si || au o precedenta relativ ridicata, n timp
ce operatorii AND si OR au o precedenta relativ redusa. Este la fel ca in
aritmetica unde, intr-o ecuatie ca aceasta: a + b * c se executa intai inmultirea
si apoi adunarea, chiar daca ordinea lor este alta (daca nu sunt folosite
paranteze). La fel si in PHP, se pot folosi paranteze rotunde pentru a controla
ordinea executarii operatiilor.
Pentru comoditate, puteti forma expresii conditionale fara un operator logic. De
exemplu, daca $a este o variabila numerica, puteti folosi expresia $a ca
expresie conditionala. Expresia este considerata ca avnd valoarea FALSE daca
valoarea variabilei $a este zero, respectiv valoarea TRUE daca valoarea
variabilei respective este diferita de zero.
Daca folositi un sir ca expresie conditionala, expresia are valoarea FALSE daca
sirul este vid sau daca are valoarea speciala "\0", care simbolizeaza un octet cu
valoarea zero.
Similar, utilizarea unei valori nedefinite ca expresie conditionala determina
obtinerea valorii FALSE. Daca folositi un tablou sau un obiect ca expresie
conditionala, aceasta are valoarea FALSE daca tabloul sau obiectul sunt vide
(fara vreo valoare); n caz contrar, expresia are valoarea TRUE.
If(conditie) {
Instructiune(1);
Instructiune(2);
..................
}
- Dupa cum se observa dupa if urmeaza o pereche de paranteze rotunde in
interiorul carora se plaseaza conditia, adica o expresie logica a carei rezultat
poate fi TRUE sau FALSE. Daca si numai daca rezultatul expresiei logice
(conditia) este TRUE se vor executa instuctiunile : Instructiune(1), apoi
Instructiune(2), etc...
Se observa ca acest set de instructiune se plaseaza intre acolade. Doar intr-un
singur caz aceste acolade nu sunt necesare si anume: in cazul in care este
scrisa doar o singura instructiune.
Daca rezultatul expresiei logice dintre paranteze rotunde este FALSE , setul de
instructiuni dintre acolade nu se va executa, controlul programului va trece mai
If(conditie) {
Instructiune(1);
Instructiune(2);
..................
}
else {
Instructiune(3);
Instructiune(4);
..................
}
In acest din urma caz daca expresia logica din paranteze: conditie este
adevarata se vor executa instructiunile: Instructiune(1); Instructiune(2); , iar
daca valoarea expresiei logice : conditie are valoarea FALSE se vor executa
instructiunile: Instructiune(3); Instructiune(4);
Instructiunea asociata unei instructiuni if sau else poate fi ea nsasi o
instructiune if. O asemenea instructiune if se numeste "instructiune if
imbricata".
Iata un exemplu de instructiune if imbricata:
<?php
$numar = 88;
if ($numar > 10) {
if ($numar > 100) {
echo "Acesta este un numar mai mare decat 100";
}
else {
echo "Acesta este un numar mai mic decat 100, dar mai mare decat 10";
}
}
else {
echo "Acesta este un numar mic";
<?php
switch($numar) {
case(1):
echo "mic";
break;
case(2):
echo "mediu";
break;
case(3):
echo "mare";
break;
default:
echo "Acesta nu este un cod valabil";
}
?>
- Actiunea unei instructiuni switch este determinata de valoarea unei expresii
ntregi, nu de valoarea unei expresii conditionale. Numele variabilei este dat
ntre parantezele care urmeaza dupa cuvntul cheie switch. Acoladele
delimiteaza o serie de instructiuni case si o instructiune default optionala,
fiecare dintre instructiunile cuprinse ntre acolade putnd avea instructiuni
asociate.
Cnd este executata, instructiunea switch ncearca sa stabileasca o identitate
ntre valoarea variabilei sale si valoarea asociata unei instructiuni case. Se vor
executa instructiunile asociate primei instructiuni "case" pentru care identitatea
respectiva este valabila.
Daca valoarea variabilei din instructiunea switch nu corespunde nici uneia din
valorile asociate instructiunilor case, se vor executa instructiunile asociate
instructiunii default, daca exista o asemenea instructiune (ne este obligatorie).
Un procedeu de programare indicat consta n aceea ca fiecare instructiune case
din cadrul unei instructiuni switch sa se ncheie cu o instructiune break.
; Instructiunea break determina ncheierea executiei instructiunii switch, sare
peste "case-urile" ramase si se executa codurile care mai sunt (daca exista)
dupa "switch". n absenta instructiunii "break", executia trece la urmatoarea
instructiune "case" sau "default", fapt nedorit n majoritatea cazurilor.
2. Operatorul ? :
Cea de-a treia expresie este expresia pas. n general, aceasta modifica
una sau mai multe variabile la care se face referire n expresia test. n
cadrul exemplului, expresia pas incrementeaza valoarea variabilei $n
($n++).
1. Utilizarea matricelor
$clasa[1] = "geometrie";
$clasa[2] = "algebra";
$clasa_mate = $clasa[1];
$preferinte[Nelu] = "cirese";
$preferinte[Radu] = "mere";
$preferinte[Gabi] = "pere";
0 => Perl
1 => PHP
2 => Python
Daca doriti sa asociati unei valori o anumita cheie, puteti folosi operatorul =>,
astfel:
10 => Perl
11 => PHP
12 => Python
2. Matrici multi-dimensionale
<?php
$multiDimArray[firstLine] = array(1=>10, 2=>20, "a"=>"alpha");
$multiDimArray["nextLine"] = array(1=>20, 2=>40, "b"=>"beta");
<?php
$multiDimArray = array("firstLine"=>array(1=>10, 2=>20, "a"=>"alpha"),
"nextLine"=>array(1=>20, 2=>40, "b"=>"beta"));
10
20
Cnd ati stocat date ntr-un tablou, puteti obtine acces la valoarea unui element
al tabloului sau i puteti modifica valoarea prin intermediul cheii asociate
elementului.
De exemplu, sa presupunem ca folositi urmatoarele instructiuni pentru a crea un
tablou:
Puteti obtine acces la valoarea asociata cheii 2 prin intermediul unei instructiuni
ca aceasta:
$y = 3*$x[2];
$x[3] = 101;
Un Array ale carui chei sunt valori ntregi consecutive se numeste "Array
numeric" (sau secvential).
n general, valoarea cea mai mica a unei chei dintr-un tablou numeric este zero;
totusi, puteti crea array numeric incepand cu valoarea 1 sau orice alta valoare
ntreaga ca valoare minima a cheii.
n cazul n care cunoasteti valoarea minima a cheii unui tablou secvential, puteti
parcurge tabloul folosind o bucla for. Pentru aceasta, initializati variabila de
bucla la valoarea cea mai redusa a cheii. Folositi functia count() pentru a forma
expresia de test (conditia) a buclei. Functia count() returneaza numarul
elementelor dintr-un tablou.
Iata un exemplu simplu
<?php
$limbaje = array(0=>"Perl", 1=>"PHP", 2 =>"Python");
$limita = count($limbaje);
for ($i = 0; $i < $limita; $i++) {
echo "<br />$i => $limbaje[$i]";
Incepand cu versiunea PHP 5.4 a fost introdus un nou mod de a defini variabile
array, folosind o sintaxa scurta.
Ex.:
$arr = []; // array gol, in loc de array();
Instructiunea break
<?php
$limbaje = array(0=>"Perl", 1=>"PHP", 2 =>"Python");
$cauta = PHP; // se cauta in tabloul $limbaje valoarea $cauta
$limita = count($limbaje);
for ($i = 0; $i < $limita; $i++) {
echo "<br />Determinarea unei identitati cu $limbaje[$i]";
if ($cauta == $limbaje[$i]) {
echo "<br />$cauta este un limbaj excelent.";
break;
}
}
?>
Acum, dupa stabilirea unei identitati, instructiunea break provoaca sistarea
buclei for.
Iata datele de iesire rezultate, care acum omit examinarea inutila a elementului
tabloului asociat cu limbajul "Python":
Determinarea unei identitati cu Perl
Determinarea unei identitati cu PHP
PHP este un limbaj excelent.
Instructiunea continue
<?php
$limbaje = array(0=>"Perl", 1=>"PHP", 2 =>"Python");
$scurt = 0;
$limita = count($limbaje);
for ($i = 0; $i < $limita; $i++) {
1. array_change_key_case(array, case)
- Transforma cheile din primul parametru (array) in majuscule sau litere mici,
dupa cum e specificat la "case" (CASE_UPPER sau CASE_LOWER). Default e
CASE_LOWER. Daca "array" nu e o matrice, returneaza FALSE.
<?php
$aray = array("FirSt"=>1, "SecOnd"=>8);
print_r(array_change_key_case($aray, CASE_UPPER));
2. array_chunk(array, nr)
<?php
$aray = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($aray, 2));
3. array_combine(array_k, array_v)
- Creaza un array folosind valorile din "array_k" pentru chei, iar elementele din
"array_v" pentru valorile lor. Numarul de elementele din cele 2 matrici trebuie sa
fie egal, in caz contrar returneaza FALSE.
<?php
$a = array('a', 'b', 'c');
$b = array('x', 'y', 'z');
$c = array_combine($a, $b);
print_r($c);
4. array_count_values(array)
<?php
$aray = array('a', 8, 'a', 'b', 'a', 8, 'c');
$re = array_count_values($aray);
print_r($re);
// Return: Array ( [a] => 3 [8] => 2 [b] => 1 [c] => 1 )
?>
5. array_diff(array1, array2)
<?php
$aray1 = array("a"=>"green", "blue", "red");
$aray2 = array("b"=>"green", "yellow", "red");
$re = array_diff($aray1, $aray2);
print_r($re);
6. array_flip(array)
- Schimba valorile si cheile intre ele. Din valorile care se repeta o pastreaza pe
ultima.
print_r($re);
<?php
$aray1 = array("a"=>1, "b"=>'a', "c"=>'d', 'e');
$aray2 = array(8, 'a', 'd');
$aray3 = array(1, 'a', 'c', 'd');
$re = array_intersect($aray1, $aray2, $aray3);
print_r($re);
8. array_key_exists(cheie, array)
- Returneaza TRUE daca "cheie" este o cheie (index) in matricea "array", in caz
contrar returneaza FALSE.
<?php
$aray = array("a"=>1, "b"=>'a', "mp"=>'d');
if (array_key_exists('mp', $aray)) {
echo 'Cheia exista';
}
?>
9. array_keys(array, val)
<?php
$aray = array("a"=>1, "b"=>'c', 'd', "mp"=>'d');
$re = array_keys($aray);
print_r($re);
// Va afisa: Array ( [0] => a [1] => b [2] => 0 [3] => mp )
?>
<?php
function f_test($val) {
return $val+2;
}
$aray = array("a"=>1, "b"=>'c', 2);
$aray = array_map("f_test", $aray);
print_r($aray);
- Uneste mai multe array in unul singur. Daca au cheie de tip sir identice, va fi
pastrata valoarea ultimei chei.
<?php
$aray1 = array("a"=>1, 3, 4);
$aray2 = array("a"=>2, 8);
$re = array_merge($aray1, $aray2);
print_r($re);
// Va afisa: Array ( [a] => 2 [0] => 3 [1] => 4 [2] => 8 )
?>
12. array_pop(array)
<?php
$aray = array("a"=>1, 3, 4);
$re = array_pop($aray);
echo $re; // 4
?>
13. array_product(array)
<?php
$aray = array(1, 2, 3, 4);
echo array_product($aray); // 24
?>
<?php
$aray = array('x'=>'tutorial', 'y'=>8, 'z'=>'php', 'curs');
$ar_keys = array_rand($aray, 3); // Preia aleator 3 chei, si le aranjaza
succesiv in $ar_keys
15. array_reverse(array)
<?php
$aray = array(1, 2, 3, 'a', 'b'=>'c');
$re = array_reverse($aray);
print_r($re);
// Return: Array ( [b] => c [0] => a [1] => 3 [2] => 2 [3] => 1 )
?>
- Returneaza cheia din "array" care are valoarea "val", sau FALSE daca nu exista.
Cautarea e "case-sensitive"
<?php
$aray = array(1, 2, 3, 'a', 'b'=>'c');
$re = array_search('c', $aray);
echo $re; b
?>
17. array_shift(array)
<?php
$aray = array("a"=>1, 3, 4);
$re = array_shift($aray);
<?php
$aray = array("a"=>1, 3, 4, 5, 6, 7);
$re = array_slice($aray, 2, 3); // $re va avea: array(4, 5, 6)
$re = array_slice($aray, 3); // $re va avea: array(5, 6, 7
?>
19. array_sum(array)
<?php
$aray = array(1, 2, 3, 4);
echo array_sum($aray); // 10
?>
20. array_unique(array)
<?php
$aray = array(1, 2, 1, 4, 3, 4);
$aray = array_unique($aray); // $aray va avea: array(1, 2, 4, 3)
?>
21. array_values(array)
<?php
$aray = array("a"=>1, "b"=>'c', 'd', "mp"=>'d');
$re = array_values($aray);
print_r($re);
// Va afisa: Array ( [0] => 1 [1] => c [2] => d [3] => d )
?>
22. arsort(array)
23. asort(array)
<?php
$aray = array('c', "b"=>'xy', 'pm', "mp"=>'de');
arsort($aray);
24. count(array)
<?php
$aray = array('c', "b"=>'xy', 'pm', "mp"=>'de');
echo count($aray); // 4
?>
25. current(array);
<?php
$aray = array('php', "free"=>'tutorial', 'mysql', "mp"=>'curs');
echo current($aray); // php
?>
26. end(array);
- Muta pointerul din "array" la ultimul element si returneaza valoarea lui, daca
nu are elemente returneaza FALSE.
<?php
$aray = array('php', "free"=>'tutorial', 'mysql', "mp"=>'curs');
echo end($aray); // curs
?>
<?php
$aray = array('php', "free"=>'tutorial', 'mysql', "mp"=>'curs');
if (in_array('tutorial', $aray)) {
// Se executa ce se vrea
}
?>
29. key(array)
<?php
$aray = array('php', "free"=>'tutorial', 'mysql', "mp"=>'curs');
end($aray); // Muta pointerul la ultimul element
echo key($aray); // mp
?>
30. krsort(array)
<?php
$aray = array('li'=>'php', "free"=>'tutorial', 'mysql', "mp"=>'curs');
krsort($aray);
31. ksort(array)
<?php
$aray = array('li'=>'php', "free"=>'tutorial', 'mysql', "mp"=>'curs');
ksort($aray);
32. natcasesort(array)
<?php
$aray = array('li'=>'Php', "free"=>'tutorial', 'MySQL', "mp"=>'curs');
natcasesort($aray);
33. next(array);
<?php
$aray = array('php', "free"=>'tutorial', 'mysql', "mp"=>'curs');
echo next($aray); // tutorial
?>
34. prev(array);
<?php
$aray = array('php', "free"=>'tutorial', 'mysql', "mp"=>'curs');
end($aray); // Duce pointerul la ultimul element
echo prev($aray); // mysql
?>
35. reset(array);
<?php
$aray = array('php', "free"=>'tutorial', 'mysql', "mp"=>'curs');
next($aray); // Avanseaza pointerul cu un element
echo reset($aray); // php
?>
36. rsort(array)
37. sort(array)
<?php
$aray = array('li'=>'Php', "free"=>'tutoriale', 'MySQL', "mp"=>'curs');
rsort($aray);
38. shuffle(array)
<?php
$aray = array('li'=>'Php', "free"=>'tutoriale', 'MySQL', "mp"=>'curs');
shuffle($aray); // $aray va avea elementele amestecate aleator
?>
Sortarea matricelor
<?php
$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");
$curent = current($limbaje);
echo "<br />functia current() a returnat $curent";
$urmator = next($limbaje);
echo "<br />functia next() a returnat $urmator";
$urmator = next($limbaje);
echo "<br />functia next() a returnat $urmator";
$anterior = prev($limbaje);
echo "<br />functia prev() a returnat $anterior";
?>
Iata datele de iesire ale exemplului:
functia current() a returnat Perl
functia next() a returnat PHP
functia next() a returnat Python
functia prev() a returnat PHP
Observati modul n care sunt utilizate functiile prev() si next() pentru deplasarea
napoi, respectiv nainte, n interiorul tabloului.
3. Functia key()
<?php
$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");
$curent = current($limbaje);
$cheie = key($limbaje);
4. Functia each()
Chei
Valoare
e
- Componenta cheie a perechii cheie-valoare
0
curenta
- Componenta valoare a perechii cheie-
1
valoare curenta
- Componenta cheie a perechii cheie-valoare
key
curenta
valu - Componenta valoare a perechii cheie-
e valoare curenta
- Observati ca puteti folosi valoarea cheie "0" sau "key" pentru a obtine accesul
la componenta cheie a perechii "cheie-valoare"; similar, puteti folosi valoarea
cheie "1" sau "value" pentru a obtine accesul la componenta valoare a perechii
"cheie-valoare".
Pentru a intelege mai bine cum se foloseste functia each(), studiati exemplul
urmator:
<?php
$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");
$fiecare = each($limbaje);
$zero = $fiecare[0];
$unu = $fiecare[1];
$cheie = $fiecare['key];
$valoare = $fiecare['value];
5. Functia list()
O alta functie utila n lucrul cu tablouri este functia list(), aceasta va permite sa
atribuiti valori la numeroase variabile n cadrul unei instructiuni.
Functia list() este deseori folosita cu functia each(), deoarece functia list()
faciliteaza accesul separat la cheia si la valoarea returnate de functia each().
<?php
$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");
list($cheie, $valoare) = each($limbaje);
echo "<br />cheie = $cheie, valoare = $valoare";
$urmator = next($limbaje);
echo "<br />urmator = $urmator";
?>
Iata datele de iesire ale exemplului:
cheie = 10, valoare = Perl
urmator = Python
6. Sortarea tablourilor
0 => PHP
1 => Perl
2 => Python
Pentru a sorta matricea "$arr" pastrand corelarea initiala dintre valori si cheile
corespunzatoare se folosesc functiile asort(), respectiv arsort(). Incercati-le
singuri.
In afara de acestea mai sunt si alte functii utile pentru sortarea tablourilor.
Iata un tabel care prezinta functiile folositoare pentru sortarea unui tablou,
impreuna cu rezultatul aplicarii fiecarei functii.
Vom lua ca model pentru exemplificare urmatoarea matrice:
Funct
Operatia efectuata Rezultat
ie
0 => PHP
- Sortarea unui tablou n functie de valoare, in ordine 1 => Perl
sort()
alfabetica, fara sa se tina cont de cheile initiale 2 =>
Python
20 =>
PHP
- Sortarea unui tablou n functie de valoare, in ordine
asort 10 =>
alfabetica, pastrand corelarea initiala dintre valori si cheile
() Perl
corespunzatoare
21 =>
Python
Functia strcmpcase() este o functie din biblioteca PHP care compara doua
siruri fara a tine cont de majuscule sau minuscule. Functia returneaza o valoare
negativa daca primul sir este mai mic dect al doilea, zero daca sirurile sunt
identice, respectiv o valoare pozitiva daca primul sir este mai mare dect al
doilea.
Rezultatul va fi :
0 => Perl
1 => PHP
2 => Python
- In loc de spatiul dintre (" "), ca indiciu de separare, poate fi scris orice
caracter; dupa cum se doreste impartirea sirului.
Iata un exemplu:
<?php
$sir = "Popescu Avram Cristian Dan";
$matrice = explode(" ",$sir);
foreach($matrice as $key=>$nume) {
echo "<br />Cheie = $key Valoare = $nume";
}
?>
Acest cod va produce urmatorul rezultat:
Cheie = 0 Valoare = Popescu
Cheie = 1 Valoare = Avram
Cheie = 2 Valoare = Cristian
Cheie = 3 Valoare = Dan
- In loc de spatiul dintre (" "), ca semn de separare a elementelor in sir, poate fi
scris orice caracter; dupa cum se doreste crearea sirului.
In continuare, pentru exemplificare, folosind exemplul de mai sus, sortam
matricea "$matrice" alfabetic si apoi transferam matricea intr-un alt sir , de
aceasta data sortat (Observati folosirea caracterelor ( \" ) in expresia echo,
pentru ca la iesire rezultatul sa contina ghilimele):
<?php
$matrice = array("Popescu", "Avram", "Cristian", "Dan");
sort($matrice);
$sir = implode(" - ",$matrice);
echo "<br />Sirul rezultat : \"$sir\"";
?>
Acest cod va produce urmatorul rezultat:
Sirul rezultat : "Avram - Cristian - Dan - Popescu"
Exemplu cu WHILE
<?php
// Matricea cu datele ce vor fi afisate in tabel
$aray = array('val1', 'val2', 'val3', '... val_n');
// Se elimina posibil rand gol adaugat, pt. care nu au mai fost elemente pt. coloane
(<tr></tr>)
$tabel_html = str_replace('<tr></tr>', '', $tabel_html);
}
Exemplu cu FOR
<?php
// Matricea cu datele ce vor fi afisate in tabel
$aray = array('val1', 'val2', 'val3', '... val_n');
// Se elimina posibil rand gol adaugat, pt. care nu au mai fost elemente pt. coloane
(<tr></tr>)
$tabel_html = str_replace('<tr></tr>', '', $tabel_html);
- La fel se procedeaza cu WHILE si FOR pentru date ce sunt preluate din alta sursa (nu
doar Array), cum ar fi randuri dintr-un fisier.
Exemplu cu FOREACH
<?php
// Matricea cu datele ce vor fi afisate in tabel
$aray = array('a'=>'val1', 'b'=>'val2', 3=>'val3', 'z'=>'... val_n');
// Se elimina posibil rand gol adaugat, pt. care nu au mai fost elemente pt. coloane
(<tr></tr>)
$tabel_html = str_replace('<tr></tr>', '', $tabel_html);
}
val
val2
1
val ...
3 val_n
- In general, cel mai des folosit caz este acela cand sunt selectate mai multe
randuri dintr-un tabel MySQL si se doreste afisarea lor intr-un tabel HTML.
Mai jos este un exemplu general simplu pentru afisarea datelor din MySQL sub
forma de tabel.
Pentru lucrul cu MySQL vedeti lectiile mai avansate, de la nr. 22-27, apoi
reveniti la acest tutorial.
<?php
// Variabila in care va fi stocat codul pt. tabelul HTML
$tabel_html = '';
// Se scrie in bucla WHILE codul HTML pt. adaugarea DOAR a randurilor ce vor fi in
tabel
while($rand = mysql_fetch_array($rezultat)) {
$tabel_html .= '<tr><td>' .$rand['col1']. '</td><td>' .$rand['col2']. '</td></tr>';
}
Am folosit pana acum de mai multe ori termenul de functii. In cadrul acestei
lectii veti nvata mai multe despre utilizarea functiilor si despre modul de
definire a propriilor dumneavoastra functii.
Functiile reprezinta secvente de cod care sunt apelate foarte frecvent in cadrul
codului PHP. Folosirea intensiva a functiilor contribuie la o structurare mai buna
a codului; ideea este ca o problema complexa sa o divizam in mai multe sub-
probleme, fiecare astfel de subproblema sa fie executata in cadrul unei functii.
Pe de alta parte folosirea frecventa a functiilor duce la micsorarea cantitatii de
cod scris; prin urmare vom avea un cod care se executa mai eficient.
rand()
Cnd se produce o eroare n timpul executiei unei functii, PHP genereaza mesaje
de eroare. Uneori, asemenea mesaje de eroare sunt nedorite. n acest caz,
puteti suprima generarea mesajelor de eroare prin adaugarea in fata numelui
functiei a caracterului @.
De exemplu,, pentru a suprima mesajele de eroare care pot aparea n timpul
executiei functiei "f()", scriem aceasta functie dupa cum urmeaza:
y = @f(x);
Totusi, indicat este sa scrieti scripturi care sa nu genereze erori, ascunderea lor
nu rezolva problema ce cauzeaza eroarea.
De exemplu: isset($nr)
- Functia returneaza TRUE daca variabila "$nr" are setata o valoare (diferita de
NULL), in caz contrar returneaza FALSE.
Aceasta functie este foarte utila in determinarea caror comenzi sa fie executate
in functie daca o anumita variabila a fost setata sau nu. Previne aparitia unor
erori care apar in cazuri de variabile nule si ajuta si la securitate.
De exemplu, sa presupunem ca avem un cod PHP care vrem sa fie executat
numai daca prin adresa URL o fost transmisa o variabila "id", adica o adresa de
forma http://www.domeniu.site/script.php?id=un_id, folosim functia
isset() astfel:
<?php
if (isset($_GET['id'])) {
// Se executa codul dorit
}
?>
- $_GET['id'] preia valoarea lui "id" din URL, iar functia isset() verifica daca
aceasta valoare exista (daca in URL este "id=ceva"). Daca aceasta exista,
returneaza TRUE iar functia "if", avand astfel valoarea TRUE, va executa codul
dintre acoladele ei.
require("nume_fisier")
Cnd este ncarcat un script PHP care contine o instructiune require, continutul
fisierului specificat este inserat si executat n script, nlocuind instructiunea
require.
De exemplu, sa presupunem ca realizam un site in PHP care este alcatuita din
mai multe pagini, iar fiecare pagina contine in partea de sus acelasi cod HTML.
In loc sa scriem de fiecare data, pentru fiecare pagina, acelasi cod HTML, il
scriem o singura data intr-un fisier separat (de exemplu "antet.php") iar in
paginile unde vrem sa fie inclus codul HTML folosim functia require()
Prin insertia instructiunii la nceputul scriptului din fiecare pagina PHP, ca in
exemplu urmator:
<?php
require("antet.php");
?>
- cu aceasta determinati programul PHP sa includa continutul fisierului
"antet.php" ca si cum continutul respectiv ar face parte din acel script.
Acest procedeu poate simplifica ntretinerea site-ului, deoarece informatiile
standard pot fi tinute ntr-un singur fisier, ceea ce le face usor de localizat si de
modificat.
O alta functie, similara instructiunii require este functia include(). Spre
deosebire de functia require() care introduce datele din fisierul extern intocmai
cum sunt scrise, functia include() este o instructiune executabila ce determina
evaluarea scriptului PHP din fisierul extern si codul acestuia este executat ca si
cum ar fi aparut n textul scriptului unde este inclus.
Sintaxa functiei include() este urmatoarea:
include("nume_fisier.php");
function nume_functie(nume_argument) {
Aici se insereaza corpul functiei
}
<?php
function arie($lungime, $latime) {
return $lungime * $latime;
}
$rezultat = arie(5,3);
echo "Aria exte : $rezultat";
?>
Valorile argumentelor 5 si 3 le nlocuiesc pe acelea ale argumentelor din corpul
functiei, care se comporta ca si cum ar fi fost scrisa astfel:
return 5*3
6. Functii recursive
<?php
function recursor($nr) {
$nr++;
if ($nr<8) {
return recursor($nr);
}
return $nr;
}
$x = recursor(3);
echo $x;
?>
- Daca rulati acest script, rezultatul afisat va fi 8.
- Variabila "$x" primeste ca valoare functia "recursor()" careia ii transmite ca
argument numarul 3.
- Functia "recursor()" incrementeaza cu o unitate valoarea argumentului, prin
"$nr++;" care devine 4, apoi conditia "if ($nr<8)" verifica daca aceasta variabila
din functie e mai mica decat 8, in caz afirmativ se executa comanda "return
recursor($nr);" care sisteaza executia altui cod din functie si auto-apeleaza iar
functia (cu noua valoare a lui "$nr" ca argument) care iar incrementeaza
valoarea lui "$nr" si verifica din nou conditia care iar autoapeleaza functia, ... si
tot asa pana cand "$nr" va avea valoarea 8 si la verificare conditiei "if" aceasta
returneaza FALSE si se trece mai departe la executia comenzii "return $nr;" care
va returna 8 ca valoare a variabilei "$x".
Functia "echo" va afisa valoarea lui "$x", adica 8.
<?php
function impozit_vanzari($cantitate, $rata = 0.0725) {
return $cantitate * $rata;
}
$cumparaturi = 123.45;
echo "<br />cumparaturi = $cumparaturi";
$impozit1 = impozit_vanzari($cumparaturi, 0.09);
echo "<br />impozit1 = $impozit1";
$cumparaturi = 123.45;
echo "<br /><br />cumparaturi = $cumparaturi";
$impozit2 = impozit_vanzari($cumparaturi);
echo "<br />impozit2 = $impozit2";
?>
Rezultatu afisat va fi:
cumparaturi = 123.45
impozit1 = 11.1105
cumparaturi = 123.45
impozit2 = 8.950125
1. abs(nr)
- Converteste un numar, "nr", din baza1 in baza2. Rezultatul returnat este un sir
cu "nr" convertit in baza2.
<?php
$nr = 18;
// Afiseaza numarul 18 convertit din baza 10 in baza 2 (cod binar)
echo base_convert($nr, 10, 2); // 10010
?>
3. bindec('sir_binar')
<?php
echo bindec('10010'); // 18
echo bindec('1000'); // 8
?>
4. ceil(nr)
<?php
echo ceil(7.8); // 8
echo ceil(5); // 5
echo ceil(-2.3); // -2
echo ceil(1.2); // 2
?>
5. cos(radian)
<?php
echo cos(30); // 0.15425144988758
echo cos(90); // -0.44807361612917
?>
6. decbin(nr)
<?php
echo decbin(-5); // 11111111111111111111111111111011
7. dechex(nr)
<?php
echo decbin(-5); // fffffffb
echo decbin(88); // 58
?>
8. decoct(nr)
<?php
echo decbin(-5); // 37777777773
echo decbin(88); // 130
?>
9. floor(nr)
<?php
echo floor(7.8); // 7
echo floor(5); // 5
echo floor(-2.5); // -3
echo floor(1.2); // 1
?>
10. fmod(x, y)
- Returneaza valoarea ramasa a lui "x" impartit la "y", care nu mai e multiplu de
"y".
<?php
$x = 8.5;
$y = 3;
$r = fmod($x, $y); // $r va avea valoarea 2.5 (2 * 3 + 2.5 = 8.5)
?>
11. hexdec('hex')
<?php
echo hexdec('ee'); // 238
echo hexdec('3fe'); // 1022
?>
<?php
echo hypot(3, 4); // 5
?>
13. is_infinite(val)
- Returneaza TRUE daca valoarea lui "val" este un numar infinit (precum log(0)),
altfel, returneaza FALSE.
<?php
$nr = log(0);
if (is_infinite($nr)) echo 'Nr. infinit';
?>
14. lcg_value()
<?php
echo lcg_value(); // 0.64820835969476
?>
15. log10(nr)
<?php
echo log10(1000); // 3
?>
<?php
echo log(9, 3); // 2
?>
<?php
echo max(9, 3, 8, 78, 55); // 78
?>
<?php
echo mt_rand(9, 55); // 47
?>
20. octdec('oct')
<?php
echo octdec('42'); // 34
?>
21. pi()
<?php
echo pi(); // 3.1415926535898
echo M_PI; // 3.1415926535898
?>
<?php
echo pow(4, 3); // 64
?>
23. round(nr)
<?php
echo round(7.8); // 8
echo round(5); // 5
echo round(-2.5); // -3
echo round(1.2); // 1
?>
24. sin(radian)
25. sqrt(nr)
<?php
echo sqrt(225); // 15
?>
26. tan(radian)
<?php
echo tan(30); // -6.4053311966463
echo tan(90); // -1.9952004122082
?>
27. is_numeric(val)
<?php
$x = 32/3;
if (is_numeric($x)) echo "E un numar si are valoarea: $x"; // E un numar si
are valoarea: 10.666666666667
?>
1. call_user_func("func", arg)
<?php
function func($arg1, $arg2) {
return "$arg1 - $arg2";
}
// Apeleaza func()
echo call_user_func("func", 'site-ul-tau', 'net'); // site-ul-tau - net
2. call_user_func_array("func", array_arg)
<?php
// Functie creata standard
function func1($arg1, $arg2) {
return $arg1 + $arg2;
}
// Apeleaza func1()
echo call_user_func_array("func1", $aray_p); // 15
// Apeleaza $func2
echo call_user_func_array($func2, $aray_p); // 56
?>
3. create_function("argumente", "cod_functie")
<?php
$var = create_function('$arg', 'return $arg*2;');
echo $var(8); // 16
?>
4. func_num_args()
<?php
function test() {
// Preia si afiseaza numarul de argumente primite
// Apeleaza functia
test(1, 2, 'a'); // Numar argumente primite: 3
?>
5. func_get_arg(nr)
<?php
function test() {
// Preia numarul de argumente primite
$nr_args = func_num_args();
// Daca nr. argumente e mai mare sau egal cu 2, afiseaza argumentul cu index
2
if ($nr_args>=2) {
echo 'Argumentul cu indice 2 e: '. func_get_arg(2);
}
}
// Apeleaza functia
test(1, 'php', 'www.site-ul-tau.net'); // Argumentul cu indice 2 e:
www.site-ul-tau.net
?>
6. func_get_args()
<?php
function test() {
// Preia argumentele primite
$array_args = func_get_args();
// Apeleaza functia
test(1, 'tutoriale', 'www.site-ul-tau.net'); // Array ( [0] => 1 [1] =>
tutoriale [2] => www.site-ul-tau.net )
?>
7. function_exists("function")
<?php
function end_script() {
echo 'Terminare script';
}
Variabile globale
Variabile locale
Asa cum s-a explicat anterior, variabilele globale sunt cele declarate n afara
oricarei functii.
Totalitatea locurilor unde este accesibila o variabila se numeste "domeniu de
existenta al variabilei". Variabilele globale nu pot fi accesibile din interiorul
corpului unei functii; cu alte cuvinte, domeniul de existenta al unei variabile
globale, nu include corpurile functiilor. Daca doriti sa obtineti accesul la o
O alta metoda prin care putem solutiona aceasta problema este prin folosirea
variabilei PHP predefinite $GLOBALS, dupa cum puteti vedea in exemplu
urmator:
<?php
$var1 = 135;
$var2 = 250;
function Suma() {
return $GLOBALS['var1'] + $GLOBALS['var2'];
}
echo "Suma este ". Suma();
?>
$GLOBALS este o variabila predefinita, este de fapt un array ; elementele
acestei matrice au cheia egala cu numele variabilelor declarate si valoarea
egala cu cea a variabilelor declarate.
$GLOBALS este o variabila superglobala, ea va fi recunoscuta in orice script.
Puteti folosi oricare din cele doua variante prezentate: instrucrtiunea GLOBAL
<?php
function v_local() {
$x = 5;
echo "<br />In corpul functiei x = $x";
}
$x = 2;
echo "<br />In corpul scriptului x = $x";
v_local();
echo "<br />In corpul scriptului x = $x";
?>
Cand executati acest script, veti primi urmatoarele rezultate:
In corpul scriptului x = 2
In corpul functiei x = 5
In corpul scriptului x = 2
Remarcati diferenta dintre cele doua variabile $x, chiar daca numele variabilelor
este acelasi.
Cand este apelata functia v_local(), $x ia valoarea 5, in rest, inainte si dupa, ia
valoarea 2.
Domeniul de existenta al variabilei globale $x nu se extinde n interiorul corpului
functiei v_local(), iar domeniul de existenta al variabilei locale $x nu se extinde
dincolo de corpul functiei respective. Cu alte cuvinte, domeniile de existenta ale
celor doua variabile sunt complet distincte.
v_static();
v_static();
v_static();
?>
Daca rulati acest script, veti primi urmatoarele rezultate:
x=1
x=1
x=1
x=1
x=2
x=3
Observati ca variabila locala $x, definita n cadrul functiei v_local(), este creata
din nou la fiecare apelare a functiei, n consecinta, valoarea sa este ntotdeauna
afisata ca fiind egala cu 1.
Prin contrast, variabila statica $x, definita n cadrul functiei v_static(), si
pastreaza valoarea de la un apel al functiei la urmatorul; ca atare, valoarea sa
creste de fiecare data cnd este executata functia.
4. Utilizarea referintelor
In mod prestabilit, argumentele transferate unei functii PHP sunt transmise prin
valoare, ceea ce nseamna ca valorile argumentelor sunt copiate si functiile
utilizeaza copii ale valorilor argumentelor lor, nu argumentele n sine. Ca o
consecinta, o functie PHP nu poate modifica valorile argumentelor sale.
Totusi, puteti stabili ca o functie sa aiba posibilitatea de a modifica valoarea unui
argument, specificnd ca argumentul sa fie transferat prin referinta.
Cnd un argument este transferat prin referinta, valoarea sa nu este copiata;
functia lucreaza cu valoarea argumentului si are libertatea de a modifica acea
valoare.
Pentru a specifica faptul ca un argument urmeaza a fi transferat prin referinta,
inaintea argumentului va fi adaugat un caracter ampersand (&). Puteti atasa
acest caracter la argument n antetul functiei sau n apelul la functie.
Iata un exemplu care prezinta apelul prin valoare si apelul prin referinta:
<?php
function p_valoare($a) {
$a = 1;
}
$b = 0;
p_valoare($b);
echo "<br /> \$b = $b";
$b = 0;
p_valoare(&$b);
echo "<br /> \$b = $b";
$b = 0;
p_referinta($b);
echo "<br /> \$b = $b";
?>
Dupa rulati acest script, veti obtine urmatoarele date de iesire:
$b = 0
$b = 1
$b = 1
Retineti ca scriptul contine doua functii, si anume "p_valoare()" si
"p_referinta()". Fiecare functie preia un singur argument, denumit $a. Antetul
functiei "p_referinta()" specifica faptul ca argumentul sau este transferat prin
referinta; argumentul functiei "p_valoare()" este transferat prin valoare.
Primul paragraf al programului invoca functia "p_valoare()", transfernd
argumentul prin valoare. n consecinta, functia lucreaza cu o copie a
argumentului sau, iar valoarea variabilei $b nu se modifica.
Cel de-al doilea paragraf al programului invoca de asemenea functia
"p_valoare()"; dar, foloseste un caracter ampersand (&) pentru a determina
transferul prin referinta al valorii variabilei $b. n consecinta, functia modifica
valoarea argumentului sau, care se transforma din 0 n 1.
Cel de-a treilea paragraf al programului invoca functia "p_referinta()". Antetul
functiei respective foloseste un caracter ampersand (&) pentru a specifica
faptul ca valoarea argumentului sau este transferata prin referinta, n
consecinta, functia modifica valoarea argumentului sau, care se transforma din
0 n l.
- Aceste functii permit sa preiei data si timpul de la server in script-ul PHP; ele
depind de setarile locale ale serverului.
PHP date()
// Exemplu cu strtotime()
echo '<br /><br />Exemplu cu strtotime():<br />';
echo '<br /> 15 October 1976, 20:38:00 - '. strtotime('15 October 1976, 20:38:00');
// Alte exemple
echo '<br /> 07 July 1996 - '. strtotime('07 July 1996');
echo '<br /> +3 days - '. strtotime('+3 days');
echo '<br /> +1 one week - '. strtotime('+1 week');
echo '<br /> +1 week 2 days 3 hours 30 seconds - '. strtotime('+1 week 2 days 3 hours 30
seconds');
echo '<br /> next Sunday - '. strtotime('next Sunday');
?>
Acest cod va afisa:
Timestamp: 214252680
October 15, 1976 este Friday
Exemplu cu strtotime():
// instructiuni php
$load_time += microtime(true);
n Lectia 2 au fost prezentate sirurile, tipul de date PHP care stocheaza texte, n
aceasta lectie veti nvata mai multe despre utilizarea sirurilor.
Valorile de tip sir sunt secvente de caractere incluse ntre ghilimele duble
sau simple
Variabilele pot fi de tip string si li-se poate atribui o valoare de tip sir.
Ultimele doua secvente escape prezentate mai sus folosec un cod ASCII
(America Standard Code for Information Interchange) pentru reprezentarea unui
caracter.
Codurile ASCII sunt valori ntregi, care sunt cuprinse ntre 0 si 255; fiecare litera
PHP include doua functii utile pentru generarea datelor de iesire formatate, n
speta printf() si sprintf().
Functia printf() afiseaza datele sale de iesire, n timp ce functia sprintf()
returneaza datele sale de iesire sub forma unei valori sir.
n general, fiecare functie preia doua sau mai multe argumente. Primul
argument este un sir, denumit sir de formatate, care specifica formatul datelor
de iesire, iar celelalte argumente specifica valorile care vor constitui datele de
iesire.
Iata un exemplu simplu de utilizare a functiei sprintf():
<?php
$num = 8.7;
echo $num;
$num = sprintf("%05.2f", $num);
echo '<br>'. $num;
?>
- Rezultatul afisat va fi:
8.7
08.70
- Cu ajutorul expresiei "%05.2f", sprintf() formateaza numarul din $num astfel
incat acesta sa fie format din 5 caractere dintre care unul punct (.) si 2
zecimale.
number_format(numar)
number_format(numar, zecimale)
<?php
$sir = 'Un sir ce contine caractere: " si \ ';
2. bin2hex('sir')
<?php
echo bin2hex('M'); // 4d
?>
3. chr(ascii)
<?php
echo chr(77); // M
?>
<?php
$sir = 'Sir de test, siruri.';
5. echo 'sir'
<?php
echo 'http://www.site-ul-tau.net'; // http://www.site-ul-tau.net
?>
6. explode('sep', "sir")
<?php
$sir = 'Sir de test, cu subsiruri, separate de, virgula.';
$aray = explode(',', $sir);
print_r($aray); // Array ( [0] => Sir de test [1] => cu subsiruri [2] =>
separate de [3] => virgula. )
?>
7. html_entity_decode("sir")
<?php
$sir = 'Sir de test, cu entitati © <b>html</b>.';
8. htmlentities("sir")
<?php
$sir = 'Sir de test, cu entitati " & - <b>html</b>.';
$sir = htmlentities($sir); // $sir va deveni: Sir de test, cu entitati "
& - <b>html</b>.
?>
9. htmlspecialchars_decode("sir")
10. htmlspecialchars("sir")
- Converteste doar caracterele ghilimele, & < si > din "sir" in entitati HTML.
11. md5("sir")
<?php
$sir = 'www.site-ul-tau.net';
<?php
$sir = 'abc def gh89 ';
13. sha1("sir")
<?php
$sir = 'Test sir, tutorial php, functii pt. siruri.';
echo str_ireplace('Tutorial', 'curs', $sir); // Test sir, curs php, functii pt.
siruri.
echo str_ireplace(array('siruri', 'sir'), 'string', $sir); // Test string, tutorial
php, functii pt. string.
?>
<?php
$sir = '=- ';
16. str_shuffle("sir")
<?php
$sir = 'Site www.site-ul-tau.net/php-mysql';
<?php
$sir = 'Test sir';
$ar1 = str_split($sir); // $ar1 va avea valoarea array('T', 'e', 's', 't', ' ', 's',
'i', 'r')
$ar2 = str_split($sir, 3); // $ar2 va avea valoarea array('Tes', 't s', 'ir')
?>
18. str_word_count("sir")
<?php
$sir = 'Toate`s vechi si noi sunt toate';
- Compara cele doua siruri date ca parametri, fara diferenta intre majuscule si
litere mici. Returneaza 0 daca sirurile sunt egale, < 0 daca "sir1" e mai mic
decat "sir2" sau > 0 daca "sir1" e mai mare decat "sir2"
<?php
$sir1 = 'Salut';
$sir2 = 'salut';
if (strcasecmp($sir1, $sir2) == 0) {
echo 'Sirurile sunt egale';
}
?>
<?php
$sir = 'Salut tuturor, tineri si batrani';
22. strip_tags("sir")
<?php
$sir = 'Exemplu cu <b>taguri</b> <h6>html</h6>';
23. stripslashes("sir")
<?php
$sir = 'Exemplu cu \" stripslashes() \" \n';
<?php
$sir = 'www.site-ul-tau.net';
<?php
$sir = 'www.site-ul-tau.net';
- Returneaza tot sub-sirul din "sir", care incepe de la prima aparitie a lui 'car',
case-sensitive (cu deosebire intre majuscule si litere mici). Daca nu e gasit 'car',
returneaza FALSE.
28. strlen("sir")
<?php
$sir = 'Tutorial PHP';
echo strlen($sir); // 12
?>
- Returneaza bucata ramasa din "sir" incepand de la ultimul caracter din "sub-
sir" gasit in "sir". Functia e case-sensitive. Daca "sub-sir" nu se gaseste in "sir",
returneaza FALSE.
<?php
$sir = 'Tutorial PHP, curs gratuit';
30. strrev("sir")
- Inverseaza sir-ul.
<?php
$sir = 'Tutorial PHP, curs gratuit';
31. strtolower("sir")
32. strtoupper("sir")
<?php
$sir = 'Tutorial PHP, curs ONLINE gratuit';
- Returneaza numarul de cate ori "sub_sir" se gaseste in "sir". Functia este case-
sensitive.
<?php
$sir = 'Un test functii php, test pentru siruri.';
<?php
$sir = 'Tutoriale, cursuri, scripturi php.';
<?php
$sir = '--Tutoriale php--';
36. ucfirst("sir")
<?php
$sir = 'abc def';
37. ucwords("sir")
<?php
$sir = 'site-ul-tau.net, web site';
38. nl2br("sir")
- Inlocuieste caracterele de rand nou (\r\n si \n) cu tagul HTML BR. Functie utila
cand sirul e preluat dintr-un textarea.
<?php
$sir = "Sir test \r\n preluat dintr-un \r\n camp textarea.";
$sir = nl2br($sir); // Acum $sir va fi "Sir test <br /> preluat dintr-un <br
/> camp textarea."
?>
<?php
$sir = 'Cuvaaaaaaaaaannnnnnnnnnnntttttttt, cam prea
llluuuuuuunnnnnnnnggggggg.';
1. Manipularea sirurilor
PHP contine peste 70 de functii care lucreaza cu siruri. Aceasta sectiune descrie
cateva functii pe care este posibil sa le utilizati frecvent. Aceste functii va permit
sa obtineti lungimea unui sir, sa eliminati dintr-un sir caracterele de tip spatiu
alb, sa convertiti caracterele unui sir n majuscule sau minuscule si altele.
- Functia strlen() returneaza lungimea sirului specificat ca argument al functiei.
<?php
$s = "Acesta este un sir";
$n = strlen($s);
echo "<br /> Lungimea sirului este: $n";
?>
Scriptul de mai sus va afisa:
Lungimea sirului este: 18
- Numeroase functii PHP va permit sa eliminati caracterele de tip spatiu alb de la
una sau ambele extremitati ale unui sir.
Iata un exemplu; care prezinta modul de operare al acestor functii:
<?php
$s = " Acesta este un sir ";
$n = strlen($s);
echo "<br /> Lungimea sirului este: $n";
2. Compararea sirurilor
PHP furnizeaza patru functii care sunt deosebit de utile pentru compararea
sirurilor. Aceste functii sunt enumerate n tabelul urmator.
Fiecare functie returneaza o valoare al carei semn determina rezultatul
comparatiei; nu trebuie sa ncercati sa interpretati valoarea returnata efectiva.
PHP include numeroase functii care gasesc si extrag sub-tiruri, adica parti dintr-
un sir. Cele mai importante functii de acest gen sunt rezumate n tabelul
urmator:
$cauta = "cat";
$inlocuire = "DOG";
$rezultat = str_replace($cauta, $inlocuire, $subiect);
echo "<br /> str_replace : $rezultat";
$inlocuire = "CAT";
$rezultat = substr_replace($subiect, $inlocuire, 4, 3);
^The .* hack$ - Sirurile care incep cu "the " si se sfarsesc cu " hack"
^([a-zA-Z0-9]+[a-zA-Z0-9._%-]*@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4})$
- Expresie regulata pentru adrese de e-mail
- Iata un exemplu:
<?php
$model = "[sml]at";
$subiect = "La noi in sat";
$rezultat = ereg($model, $subiect);
if ($rezultat) {
echo 'Model inclus in subiect';
}
?>
- In acest script, variabila $rezultat primeste valoarea TRUE, deoarece sirul
'subiect' contine sub-sirul "sat", care corespunde expresiei regulate.
Pentru verificare, instructiunea "if" verifica daca "$resultat" este TRUE si in caz
afirmativ executa comanda dintre acolade, "echo" care afiseaza 'Model inclus in
subiect'.
- Pentru a verifica daca un sir contine numai litere si numere, puteti folosi direct
functia ctype_alnum()
- Deoarece functiile "ereg" au fost anulate incepand cu versiunea PHP 5.3, este
indicat sa nu le mai folositi, cunoasterea lor e necesara daca le intalniti in
scripturi mai vechi. Acestea au fost inlocuite cu functii "preg_" (Perl-Compatible).
Mai multe detalii si exemple despre aceste functii gasiti in manualul Expresii
regulate (compatibile Perl.
Expresiile regulate compatigile Perl se adauga intre caractere "/". De exemplu
sablonul ([a-z0-9]+) se foloseste /([a-z0-9]+)/.
Valorile majoritatii variabilelor dispar atunci cnd scriptul PHP care le contine si
ncheie executia. Spre deosebire de acestea, valorile variabilelor cookie se pot
pastra un timp indefinit. Pentru ca valorile lor sa se poata pastra, browserul
utilizatorului stocheaza variabilele cookie n unitatea de hard-disc a
utilizatorului.
Majoritatea navigatoarelor de Web au posibilitatea sa activeze/dezactiveze
cookie-urile. Trebuie sa tineti cont de acest lucru cand doriti sa folositi cookie in
scripturile dv., totusi, comform statisticilor, in jur de 1% dintre utilizatori au
optiunea cookie dezactivata.
PHP pune la dispozitia utilizatorilor functii pentru transmiterea cookie-urilor de la
server la browser, si modalitati de citire a cookie-urilor.
Pentru a citi cooki-urile puteti utiliza variabila PHP de tip tablou $_COOKIE sau
$_HTTP_COOKIE_VARS, acestea contin numele si valoarea fiecarei variabile
cookie curenta. Daca doriti sa obtineti acces la acest tablou, puteti folosi un
program ca urmatorul:
Privilegiile asociate unui fisier sau unui catalog determina operatiile pe care le
poate executa un utilizator cu fisierul sau catalogul respectiv.
Pentru a adauga un fisier intr-un director, folosind PHP, trebuie sa aveti
permisiunea de scriere in acel director, de asemenea, pentru a adauga date intr-
un fisier, trebuie sa aveti permisiunea de scriere in fisierul respectiv.
Aceste permisiuni sunt date (configurate) de administratorul sistemului
respectiv.
PHP furnizeaza numeroase functii care va permit sa obtineti informatii care
descriu un fisier. Tabelul urmator rezuma cele mai cunoscute dintre aceste
functii.
$result = file_exists($filename);
echo "<br /> file_exists(): $result";
$result = fileowner($filename);
echo "<br /> fileowner(): $result";
$result = filegroup($filename);
echo "<br /> filegroup(): $result";
$result = filetype($filename);
echo "<br /> filetype(): $result";
$result = filesize($filename);
echo "<br /> filesize(): $result";
$result = fileatime($filename);
$result = date("m/d/Y H:i", $result);
echo "<br /> fileatime(): $result";
$result = filectime($filename);
$result = date("m/d/Y H:i", $result);
echo "<br /> filectime(): $result";
$result = filemtime($filename);
$result = date("m/d/Y H:i", $result);
echo "<br /> filemtime(): $result";
$result = fileperms($filename);
$result = decoct($result);
echo "<br /> fileperms(): $result";
$result = is_file($filename);
echo "<br /> is_file(): $result";
$result = is_dir($filename);
echo "<br /> is_dir(): $result";
$result = is_readable($filename);
echo "<br /> is_readable(): $result";
$result = is_writable($filename);
echo "<br /> is_writable(): $result";
?>
Datele de iesire ale exemplului sunt urmatoarele
file_exists(): 1
fileowner(): 0
filegroup(): 0
filetype(): file
filesize(): 5
- O lista cu mai multe functii utile in lucrul cu fisiere gasiti la pagina -> Functii
pentru fisiere si directoare.
2. Privilegii de fisier
rwxr-xr--
"r-x", membrii grupului posesor al fisierului pot citi sau executa fisierul,
dar nu pot scrie n fisier
"r--", alti utilizatori pot citi fisierul, dar nu pot scrie n fisier sau executa
continutul fisierului
Privilegiul 'x' este semnificativ numai pentru fisierele care includ un continut
executabil, cum sunt fisierele binare executabile (.exe) sau anumite categorii de
scripturi.
r-4
w-2
x-1
Pentru a modifica privilegiile unui fisier, folositi functia chmod(), care are
urmatoarea forma:
chmod(nume_fisier, mod)
chgrp("nume_fifier", grup)
- Unde "grup" este un nume sau numar care desemneaza grupul respectiv.
Inainte de a putea citi sau scrie ntr-un fisier, trebuie sa deschideti fisierul
folosind functia fopen().
fopen("nume_fisier", "mod")
Sub Microsoft Windows, fisierele ASCII si fisierele binare sunt tratate n mod
diferit. Cnd deschideti un fisier binar sub Windows, specificati "b" ca al doilea
caracter al modului; de exemplu, "rb" pentru citire, "wb" pentru scriere, "a+b"
pentru citire si adaugare. Daca nu procedati astfel, citirile din fisier si alte
operatii se vor ncheia prematur sau vor esua.
<?php
$fh = fopen("carte.txt", "rb");
if (!$fh) {
echo "Nu a fost deschis fisierul carte.txt.";
}
?>
Functia fopen() returneaza FALSE daca nu reuseste sa deschida fisierul. In acest
caz, scriptul executa instructiunea echo care afisaza un mesaj.
O forma alternativa mai simpla foloseste operatorul OR (SAU):
<?php
($fh = fopen("carte.txt", "rb"))
OR die("Nu a fost deschis fisierul carte.txt.");
?>
fclose(identificator_fisier)
Functia fclose() returneaza valoarea TRUE daca fisierul a fost nchis cu succes.
Testarea acestei valori este rareori necesara, deoarece nu se mai pot face prea
multe dupa ce s-a ratat o ncercare de a nchide un fisier.
PHP furnizeaza o varietate de functii pentru citirea fisierelor. Una dintre acestea
este fread(), care are urmatoarea forma:
fread(identificator_fisier, lungime)
Argumentul 'identificator_fisier' este valoarea returnata de functia fopen(), iar
argumentul 'lungime' specifica numarul maxim de octeti care vor fi cititi. Octetii
cititi din fisier sunt returnati sub forma de valoare de tip sir. Daca operatia de
citire ntlneste sfrsitul fisierului, PHP va returna mai putin de lungime octeti
data.
Iata un exemplu de citire si de afisare a unui text dintr-un fisier, folosind functia
fopen() (Fisierul "carte.txt" folosit ca test in exemplele de mai jos trebuie sa se
afle in acelasi director in care este si scriptul php):
<?php
$fh = @fopen("carte.txt", "rb");
if (!$fh) {
echo "Nu a fost deschis fisierul carte.txt.";
PHP include o functie conexa, denumita fgetc(), care citeste un octet din fisierul
specificat.
<?php
$nume = "carte.txt";
$fh = @fopen($nume, "rb");
if (!$fh) {
echo "Nu a fost deschis fisierul carte.txt.";
}
else {
$l = filesize($nume);
$s = fread($fh, $l);
echo "<br /> Citeste: $s";
fclose($fh);
}
?>
<?php
$nume = "carte.txt";
$fh = @fopen($nume, "rb");
if (!$fh) {
echo "Nu a fost deschis fisierul carte.txt.";
n general, dintr-un fisier trebuie citit mai mult dect prima linie a acestuia.
Pentru aceasta, un script trebuie sa dispuna de o modalitate de a determina
momentul cnd fisierul a fost citit n totalitate.
Functia feof() are chiar acest scop, returnnd o valoare care arata daca s-a
ajuns sau nu la sfrsitul fisierului. Functia are urmatoarea forma:
feof(identificator_fisier)
Argumentul 'identificator_fisier' este valoarea returnata de functia fopen().
Functia feof() returneaza TRUE daca fisierul specificat este la sfrsit; n caz
contrar, returneaza FALSE.
Iata cum se poate folosi functia feof() pentru a controla procesul de citire a unui
ntreg fisier, linie cu linie:
<?php
$nume = "carte.txt";
$fh = @fopen($nume, "rb");
if (!$fh) {
echo "Fisieru carte.txt nu a putut fi deschis";
}
while (!feof($fh)) {
$s = fgets($fh, 256);
echo "<br /> Citeste : $s";
}
fclose($fh);
?>
- Instructiunea "while" asigura faptul ca functia fgets() este apelata n mod
repetat, pna la citirea tuturor liniilor.
O alta modalitate simpla de a citi linie cu linie un ntreg fisier consta n a folosi
functia file(). Aceasta functie returneaza un tablou n care fiecare element
contine o linie a fisierului specificat.
Iata un exemplu care foloseste functia file() pentru a citi si pentru a afisa
continutul unui fisier:
<?php
$tablou = file("carte.txt");
foreach ($tablou as $s) {
echo "<br /> Citeste : $s";
}
?>
PHP furnizeaza doua functii care faciliteaza afisarea continutului unui fisier.
- Una dintre functii, fpassthru(), necesita un argument care specifica
identificatorul fisierului care urmeaza sa fie afisat:
readfile("carte.txt");
Fiecare fisier are un pointer asociat care indica pozitia octetului unde se va
produce urmatoarea operatie.
Puteti folosi functia rewind() pentru a readuce pointerul la nceputul fisierului.
Functia are urmatoarea forma ('identificator_fisier' este identificatorul de fisier
returnat de functia fopen()):
rewind(identificator_fisier)
Nu puteti readuce pointerul unui fisier la nceputul propriu-zis al unui fisier daca
fisierul a fost deschis pentru un acces de tip atasare, adica ntr-unul din
modurile 'a' sau 'a+'.
<?php
$nume = "carte.txt";
$fh = @fopen($nume, "rb");
if (!$fh) {
echo "Fisieru carte.txt nu a putut fi deschis";
}
while (!feof($fh)) {
$s = fgets($fh, 256);
echo "<br /> Citeste : $s";
}
// Deruleaza la inceputul fisierului si reia redarea acestuia
rewind($fh);
while (!feof($fh)) {
$s = fgets($fh, 256);
echo "<br /> Citeste \$s : $s";
}
fclose($fh);
?>
ftell(identificator_fisier)
Pentru a scrie intr-un fisier se foloseste functia fwrite(), aceasta are urmatoarea
forma:
fwrite(identificator_fisier, date);
- Unde 'identificator_fisier' este identificatorul de fisier returnat de functia
fopen(), iar 'date' este o valoare sir care determina datele care urmeaza a fi
scrise.
Daca executia functiei reuseste, returneaza numarul octetilor scrisi; n caz
contrar, returneaza valoarea l.
Iata un exemplu care prezinta modul de scriere a datelor ntr-un fisier:
- PHP dispune de o alta functie pentru scrierea fisierelor, fputs(). Totusi, n afara
de nume, fputs() este similara cu functia fwrite().
1. basename(adresa, "sufix")
<?php
$url = 'http://www.site-ul-tau.net/php-mysql/index.php';
$file = basename($url); // $file e "index.php"
$file = basename($url, ".php"); // $file e "index"
?>
2. chmod(file, mod)
- Modifica prmisunile CHMOD a lui "file" (cale si nume fiser) cu cele specificate la
"mod" (0777, 0644, ...). Daca modificarea reuseste returneaza TRUE, in caz
contrar, FALSE.
<?php
chmod("director/fisier.ext", 0755);
?>
3. copy(sursa, destinatie)
"> <?php
$file = 'examplu.txt';
$newfile = 'dir/examplu.txt.bak';
if (!copy($file, $newfile)) {
echo "Fisierul$file nu a putut fi copiat \r\n";
}
?>
4. dirname(adresa)
- Returneaza numele directorului din "adresa", fara numele fisierului sau alte
extensii.
<?php
$url = 'site-ul-tau.net/php-mysql/index.php';
$dir = dirname($url);
5. disk_free_space(cale_dir)
<?php
$dir = '/'; // Directorul radacina
6. disk_total_space(cale_dir)
7. fopen("fisier", "mod")
a sau ab - scriere, adauga datele dupa cele deja existente. Creaza fisierul
daca nu exista.
a+ sau a+b - citire si scriere, adauga datele dupa cele deja existente.
Creaza fisierul daca nu exista
x sau x+b - creare pentru citire si scriere, daca fisierul exista deja,
returneaza eroare.
<?php
$file = 'tutoriale.php';
$fo = fopen($file, "a+b"); // Deschide fisierul, in modul de citire si adaugare
date
fclose($fo); // Inchide pointer-ul, elibereaza memoria folosita
?>
8. fclose(file_pointer)
<?php
$file = 'tutoriale.php';
$fo = fopen($file, "rb"); // Deschide fisierul, in modul de citire ("rb") si creaza
pointer-ul fisierului
fclose($fo); // Inchide pointer-ul, elibereaza memoria folosita
?>
<?php
$file = 'tutoriale.php';
$fo = fopen($file, "rb"); // Deschide fisierul, in modul de citire ("rb")
// Parcurge fisierul pana ajunge la sfarsit (atunci "feof" e TRUE - adica "!feof" e
FALSE)
while(!feof) {
}
<?php
$file = 'cursuri.php';
$fo = fopen($file, "rb"); // Deschide fisierul, in modul de citire ("rb")
$text = fgets($fo, 250); // Citeste 250 caractere din primul rand al fisierului
fclose($fo);
?>
11. file_exists("fisier")
<?php
if (file_exist('dir/file.ext')) echo 'Fisierul exista';
else echo 'Fisierul nu exista';
?>
12. file_get_contents("fisier")
- Returneaza tot continutul din "fisier" intr-un sir. Daca "fisier" nu poate fi citit,
returneaza FALSE.
- Preia continutul fisierului intr-un array, fiecare linie din "fisier" va fi un element
din matrice. "flag" e optional, in locul lui se poate adauga:
FILE_IGNORE_NEW_LINES (nu va prelua si caracterele de linie noua),
FILE_SKIP_EMPTY_LINES (va sari peste randurile goale).
<?php
$aray_file = file('tutorials.php');
// Sau
$aray_file = file('tutorials.php', FILE_IGNORE_NEW_LINES |
FILE_SKIP_EMPTY_LINES);
15. fileatime("file")
- Returneaza timestamp-ul (timpul UNIX) cand a fost accesat ultima data "file",
sau in caz de nereusita, FALSE.
<?php
$file = 'somefile.txt';
if (file_exists($file)) {
echo "$file a fost accesat in data: " . date("F d Y H:i:s", fileatime($file));
}
16. filectime("file")
- Returneaza timestamp-ul (timpul UNIX) cand a fost modificat ultima data "file",
sau in caz de nereusita, FALSE. Similara cu aceasta e functia filemtime()
17. fileperms("file")
18. filesize("file")
LOCK_UN - deblocare
<?php
$fo = fopen("fisier.txt", "r+");
fclose($fo);
?>
<?php
$fo = fopen('somefile.txt', 'r+b');
fseek($fo, 199); // Muta pointerul in fisier la al 200-lea caracter
?>
21. ftell(file_pointer)
<?php
// Deschide un fisier si citeste cateva caractere
$fo = fopen("dir/file.txt", "rb");
$data = fgets($fo, 12);
<?php
// Daca poate deschide fisierul pt. adaugare date
if ($fo = fopen('tutorial.txt', "a+b")) {
$add = 'Textul ce va fi adaugat';
fclose($fo);
}
?>
23. is_dir("nume")
<?php
if (is_dir('php')) echo 'php este un director in cel curent';
?>
24. is_file("nume")
- Returneaza TRUE daca "nume" exista si este un fisier, altfel returneaza FALSE.
<?php
if (is_file('php/tutoriale.php')) echo 'tutoriale.php este un fisier in directorul
"php" din cel curent';
?>
25. is_readable("nume")
- Returneaza TRUE daca "nume" (fisier sau director) exista si poate fi citit, altfel
returneaza FALSE.
<?php
// Daca fisierul poate fi citit, il citeste si afiseaza continutul
if (is_readable('php/tutoriale.php')) readfile('php/tutoriale.php');
?>
26. is_uploaded_file("fisier_up")
<?php
// Daca fisierul poate fi citit, il citeste si afiseaza continutul
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) echo 'Fisierul a fost
incarcat';
else echo 'Fisierul nu a putut fi incarcat';
?>
27. is_writable("nume")
- Returneaza TRUE daca "nume" (fisier sau director) exista si poate sa scrie in el,
altfel returneaza FALSE.
<?php
if (is_writable('php/tutoriale.php')) echo 'tutoriale.php poate fi scris';
?>
<?php
if (mkdir('php')) echo 'Directorul a fost creat';
?>
29. pathinfo("adresa_file")
<?php
$path_parts = pathinfo('/www/htdocs/index.php');
30. readfile("fisier")
31. realpath("cale_adresa")
<?php
rename("dir/file.txt", "dir/my_file.txt");
?>
33. rewind(file_pointer)
<?php
// Deschide un fisier si citeste cateva caractere
$fo = fopen("tutorial.txt", "rb");
$data = fgets($fo, 12);
fclose($fo);
?>
34. rmdir("dir")
- Sterge directorul specificat la "dir". Acesta trebuie sa fie gol. In caz de succes
returneaza TRUE, altfel FALSE.
36. tmpfile()
<?php
$temp = tmpfile(); // Creaza fisierul temporar
fwrite($temp, "Text scris in fisierul temporar creat"); // Scrie ceva in el
rewind($temp); // Readuce pointerul la inceputul fisierului
echo fread($temp, 1024); // Citeste si afiseaza primii 1024 bytes
fclose($temp); // Inchide si sterge fisierul temporar creat
?>
37. unlink("fisier")
<?php
if (unlink("test.txt")) echo 'Fisierul a fost sters.';
else echo "Stergerea fisierului nu a reusit.";
?>
<?php
$contor = "ctr.txt";
$fh = @fopen($contor, "r+b");
if (!$fh) {
echo "Nu a fost deschis fisierul ctr.txt.";
}
else {
$s = fgets($fh, 7);
$count = (int) $s;
$count = $count + 1;
rewind($fh);
fwrite($fh, $count);
echo "<br /> Nr. vizitari: $count";
fclose($fh);
flock(identificator_fisier, operatie)
Iata cum se foloseste procesul de blocare, vom folosi acelasi exemplu, contoarul
de mai sus, de data aceasta imbunatatit.
<?php
$contor = "ctr.txt";
$fh = @fopen($contor, "r+b");
if (!$fh) {
echo "Nu a fost deschis fisierul ctr.txt.";
}
else {
flock($fh, LOCK_EX);
$s = fgets($fh, 7);
$count = (int) $s;
$count = $count + 1;
rewind($fh);
fwrite($fh, $count);
flock($fh, LOCK_UN);
echo "<br /> Nr. vizitari: $count"
fclose($fh);
}
?>
- De data aceasta scriptul blocheaza fisierul "ctr.txt" pe timpul citirii si scrierii
acestuia, astfel nct accesul simultan sa nu cauzeze o numarare eronata.
O functie care faciliteaza copierea fisierelor, este copy(). Functia copy() are
urmatoarea forma:
copy (sursa, destinatiea)
Unde "sursa" este numele si calea fisierului care urmeaza a fi copiat, iar
"destinatie" este numele sau calea copiei.
Functia returneaza TRUE daca operatia de copiere reuseste; n caz contrar,
returneaza FALSE.
Iata un exemplu n care este prezentat modul de utilizare a functiei copy():
<?php
$ok = copy("test.txt", "test.txt.bak");
if (!$ok) {
echo "Copierea nu a reusit.";
}
?>
Exemplul creeaza o copie a fisierului "test.txt", cu numele "test.txt.bak", in
acelasi director.
Functia copy() va suprascrie fisierul destinatie, daca acesta exista.
Functia care va permite sa modificati numele unui fisier este rename(), aceasta
care are urmatoarea forma:
rename(nume_vechi, nume_nou)
Unde "nume_vechi" este numele si calea originala a fisierului, iar "nume_nou"
este numele dorit.
Functia returneaza TRUE daca operatia de modificare a numelui a reusit; n caz
contrar, returneaza FALSE.
Iata un exemplu de utilizare a functiei rename():
<?php
$ok = rename("test.txt", "teste.dat");
if (!$ok) {
echo "Modificarea numelui nu a reusit.";
}
?>
- Exemplu modifica numele fisierului "test.txt" in "teste.dat".
Functia care va permite sa stergeti un fisier este unlink(), aceasta care are
urmatoarea forma:
unlink(nume_fisier)
Unde "nume_fisier" este numele si calea fisierului care va fi sters.
Functia returneaza TRUE daca operatia de stergere a reusit; n caz contrar,
returneaza FALSE.
Iata un exemplu de utilizare a functiei unlink():
<?php
if(isset($_POST['submit'])) {
$uploadpath = "upload/"; // Modifica aici directorul de upload
$uploadpath = $uploadpath . basename( $_FILES['fisier']['name']);
if(move_uploaded_file($_FILES['fisier']['tmp_name'], $uploadpath)) {
echo"Fisier: ". basename( $_FILES['fisier']['name']). " a fost incarcat";
}
else {
echo "Eroare la urcarea fisierului pe server, mai incerca o data!";
}
}
?>
<?php
$ndir = chdir("temp/");
?>
Pentru a vizualiza privilegiile unui director, puteti folosi aceleasi functii utilizate
pentru vizualizarea privilegiilor fisierelor, prezentate in Lectia 17 in tabelul
"Functii PHP pentru obtinerea atributelor unui fisier". folosind ca argument
numele sau calea directorului. Aceste functii va permit sa vizualizati o varietate
de caracteristici ale directoarelor, inclusiv privilegiile de catalog, care sunt
returnate de functia fileperms().
Pentru a modifica privilegiile unui director, folositi functia chmod() care a fost
descrisa in Lectia 17 la sectiunea "Modificarea privilegiilor unui fisier". Utilizati
aceasta functie exact asa cum ati folosi-o pentru a stabili privilegiile de fisier,
folosind ca argument un director.
Pentru a putea atribui sau schimba privilegiile unui director sau fisier, modulul
PHP instalat trebuie sa aiba drepturi de modificare a directoarelor /fisierelor
specificate.
- Sau puteti folosi functia scandir($dir). Aceasta preia intr-un Array numele
tuturor directoarelor si fisierelor din directorul "$dir". In caz de nereusita
returneaza False.
Pentru a crea un director, utilizati functia mkdir(), care are urmatoarea forma:
mkdir(nume_dir, mod)
- Unde "nume_dir" este calea sau numele directorului care va fi creat, iar "mod"
reprezinta privilegiile care trebuie acordate noului catalog.
In mod normal, prima cifra a argumentului mod trebuie sa fie 0, astfel nct PHP
sa-l perceapa ca pe o valoare scrisa n octal. Revizuiti Lectia 17 , sectiunea
"Privilegii de fisier"
Functia returneaza TRUE daca creeaza catalogul; n caz contrar, returneaza
FALSE.
De exemplu, pentru a crea un catalog denumit "lucru" si pentru a-i atribui
privilegiile "rwxr-x--x", utilizati functia mkdir() dupa cum urmeaza:
<?php
$cd = mkdir("lucru", 0751);
Pentru a modifica numele unui director, puteti folosi functia rename(), care are
urmatoarea forma:
rename(nume_vechi, nume_nou)
Unde "nume_vechi" este numele si calea originala a directorului, iar "nume_nou"
este numele nou dorit.
session_start()
Aceasta trebuie sa fie printre primele linii de cod dintr-un script PHP, deoarece
apelul acestei functii trebuie facut inainte de trimiterii catre browser-ul Web a
session_start();
if(!isset($_SESSION['userName']))
$_SESSION['userName'] = "site-ul-tau";
?>
//Fisierul b.php
session_start();
?>
<?php
echo "<br />Variabila de sesiune are valoarea: ". $_SESSION['userName'];
?>
</body>
</html>
<?php
echo "<br /> Identificatorul sesiunii curente SID este:". session_id();
unset($_SESSION);
unset($_SESSION['nume_variabila']);
session_destroy()
1. Ghilimelele magice
set_magic_quotes_runtime(0);
set_magic_quotes_runtime(1);
PHP poate converti ghilimelele simple si duble dintr-un sir, folosind functia
addslashes().
Daca PHP nu este configurat astfel nct sa converteasca aceste caractere din
sir n mod automat, atunci trebuie sa executati manual aceasta modificare. Pur
si simplu utilizati functia addslashes(), transferndu-i ca argument sirul text.
Aceasta adauga caracterul backslash "\" pentru conversia caracterelor de tip
ghilimele simple, ghilimele duble, backslash si caractere nule
$modificat = addslashes($text);
$nemodificat = stripslashes($modificat)
htmlspecialchars("text" [,stil_ghilimele])
Unde "text" specifica sirul care contine textul ce urmeaza a fi convertit, iar
argumentul optional "stil_ghilimele" specifica modul de conversie a ghilimelelor
simple, respectiv duble. Valorile permise ale optiunii "stil_ghilimele" sunt:
$conversie = htmlspecialchars($texthtml);
Cnd doriti sa codificati in PHP date ca parte a unei adrese URL, puteti folosi
functia urlencode().
$b = addslashes($a);
$c = stripslashes($b);
$d = quotemeta($a);
$e = htmlentities($a);
$f = urlencode($a);
Cand creati un tabel intr-o baza de date, este important sa tineti cont de "cheia
primara" si sa va bazati pe aceasta. Coloanele dintr-un tabel trebuie sa se
bazeze pe cheia primara n totalitatea sa.
O alta operatie importanta este specificarea unui tip de date pentru fiecare
coloana. Majoritatea bazelor de date relationale accepta urmatoarele tipuri de
date generale:
Caracter
ntreg
Data si ora
Binar
Tabelul urmator rezuma tipurile de date cele mai frecvent utilizate, acceptate de
MySQL si de majoritatea bazelor de date relationale. MySQL accepta multe alte
tipuri de date, dar acestea sunt cele mai folosite.
Principalele tipuri de date din MySQL
Tip de date Descriere
- Date binare arbitrare, cu o lungime maxima de 65535
BLOB
octeti
- Un sir de caractere de lungime fixa, cu un maxim de m
CHAR(m) caractere, unde m este mai mic dect 256. Pentru
obtinerea lungimii dorite, se insereaza spatii finale
DATE - O data n format an-luna-zi; de exemplu 2008-10-15
- Un numar zecimal, reprezentat sub forma de sir cu "m"
DECIMAL cifre, din care "d" se afla la dreapta punctului zecimal.
DECIMAL(m,d) Daca "m" si "d" sunt omise, n mod prestabilit se vor
utiliza valorile 10 si 0
- Un numar cu virgula mobila, cu dubla precizie, avnd o
DOUBLE
latime de afisare egala cu "m" si un numar de "d" cifre
DOUBLE (m, d)
dupa virgula.
- Un numar cu virgula mobila, cu simpla precizie, avnd o
FLOAT(m,d) latime de afisare egala cu "m" si un numar de "d" cifre
dupa virgula
- Un ntreg pe 32 de biti. Daca se specifica atributul
INTEGER
UNSIGNED, domeniul de valori este cuprins ntre 0 si
INTEGER
4294967295; n caz contrar, domeniul este cuprins ntre
UNSIGNED
valorile -2147483648 si 2147483647
NUMERIC
- Similar cu DECIMAL
NUMERIC (m, d)
REAL
- Similar cu DOUBLE
REAL(m, d)
- Un ntreg pe 16 biti. Daca se specifica atributul
SMALLINT
UNSIGNED, domeniul de valori este cuprins ntre 0 si
SMALLINT
65535; n caz contrar, domeniul este cuprins ntre valorile
UNSIGNED
32768 si 32767
- Ora n format ora-minut-secunda; de exemplu, 08-20-
00. O valoare de tip data si ora, n format an-luna-zi ora-
TIME minut-secunda; de exemplu, 1976-01-05 00:00:00.
TIMESTAMP Aceasta reprezentare este similara celei returnate de
TIMESTAMP(m) functiile UNIX. Pt. stocare valoarea este transformata din
timpul curent in UTC si transformata invers la solicitarea
datei.
VARCHAR(m) - Un sir caracter de lungime variabila, cu un maximum de
- Alegeti un tip data sau ora adecvat pentru coloanele care contin date
calendaristice sau ore.
o - Pentru cantitati foarte mari sau foarte mici, alegeti DOUBLE ca tip
de date.
USE nume_db;
Unde "tabel" este numele tabelului, "coloana" este numele unei coloane, "tip"
este tipul datelor incluse n coloana, se poate specifica un numar nedefinit de
coloane.
De exemplu, comanda urmatoare creeaza un tabel numit "carte", care contine
coloanele "carteid", "titlu" si "pret":
CREATE TABLE carte (carteid CHAR(10), titlu VARCHAR(255), pret decimal(5,2));
- n afara tipului de date, intre paranteze, puteti specifica si alte atribute
optionale ale unei coloane:
Iata un exemplu ceva mai complicat de creare a unui tabel, care foloseste unele
din aceste atribute optionale:
CREATE TABLE carte (carteid CHAR(10) PRIMARY KEY,
titlu VARCHAR(255) NOT NULL,
pret DECIMAL(5,2) DEFAULT 50.00);
Stergerea unui tabel sau a unei coloane este un act irevocabil, datele fiind
definitiv sterse.
Pentru a sterge un tabel, scrieti urmatoarea comanda:
Unde "tabel" este numele tabelului care va fi modificat, iar "coloana" este
numele coloanei care va fi stearsa.
O alta forma a comenzii va permite sa adaugati o noua coloana n tabel:
Unde "tabel" este numele tabelului care va fi modificat, "coloana" este numele
coloanei care va fi adaugata, "tip" este tipul noii coloane, iar "[optiuni]"
constituie toate optiunile dorite, precum PRIMARY KEY.
De exemplu, pentru a adauga coloana "pretnou" la tabelul "carte", scrieti
comanda:
ALTER TABLE carte ADD pretnou DECIMAL(5,2) DEFAULT 50.00;
Pentru a vedea toate bazele de date create in MySQL, folositi urmatoarea
comanda:
SHOW DATABASES;
Pentru a vedea toate tabelele dintr-o baza de date din MySQL, folositi
urmatoarea comanda:
SHOW TABLES;
- Unde "tabel" este numele tabelului, iar "coloana1" si "coloana2" sunt coloanele
la care se va obtine accesul si al caror continut va fi afisat.
Puteti specifica mai multe coloane, separate prin virgula.
Daca vreti sa fie selectate numai acele rnduri care satisfac un anumit criteriu,
clauza "WHERE" va permite sa specificati o conditie; rndurile care nu satisfac
= Egalitate
<> Inegalitate
!= Inegalitate, diferit de
Cnd unei coloane nu i-a fost repartizata nici o valoare, SQL i atribuie valoarea
speciala NULL. De asemenea, programatorii pot atribui n mod explicit valoarea
NULL unei coloane.
Comparatiile obisnuite cu valori NULL, care folosesc operatorii de (in)egalitate,
vor returna un rezultat fals. Totusi, puteti folosi operatorul special "<=>". care
compara valorile tinnd cont de valoarea NULL. Daca folositi acest operator
pentru a compara doua valori NULL, se obtine un rezultat adevarat.
Operator Descriere
x BETWEEN y Adevarat, daca valoarea lui x este cuprinsa ntre
AND z valorile lui y si z
Adevarat daca valoarea lui x este echivalenta cu
x LIKE y
modelul y
Adevarat daca valoarea lui x nu este echivalenta cu
x NOT LIKE y
modelul y
Adevarat daca valoarea lui x este un membru al listei
x IN (y1, y2) y1, y2. Lista poate contine unul, doi sau mai multi
membri
Adevarat daca valoarea lui x nu este un membru al
x NOT IN (y1, y2) listei y1, y2. Lista poate contine unul, doi sau mai
multi membri
x IS NULL Adevarat daca x are valoarea NULL
x IS NOT NULL Adevarat daca x nu are valoarea NULL
Pentru a modifica valoarea unui rnd sau mai multor rnduri existente ntr-un
tabel, folositi o comanda "UPDATE", care are urmatoarea forma:
- Unde "tabel" este numele tabelului ale carui rnduri urmeaza sa fie modificate,
"coloana1" este numele primei coloane care urmeaza a fi modificata, "valoare1"
este valoarea care va fi repartizata n "coloana1", "coloana2" este numele celei
de-a doua coloane care urmeaza a fi modificata, "valoare2" este valoarea care
va fi repartizata n "coloana2", iar "conditie" identifica rndul sau rndurile care
urmeaza a fi actualizate, dupa o anumita conditie.
Poate fi actualizat un numar mai mare sau mai mic de coloane. Daca se doreste
ca toate randurile coloanei sa fie actualizate, clauza "WHERE" poate fi omisa.
De exemplu, comanda urmatoare modifica din coloana "titlu" numele asociat
cartii in "Curs2", in randul unde coloana "pret" are valoarea 5.
UPDATE carte SET titlu=Curs2
WHERE pret=5;
Pentru a sterge un rnd dintr-un tabel, folositi comanda "DELETE", care are
urmatoarea forma:
Daca se vrea a fi sterse toate rndurile tabelului, clauza WHERE poate fi omisa.
De exemplu, comanda urmatoare sterge rndul din tabelul "carte" asociat
titlului "Curs2":
DELETE FROM carte WHERE titlu='Curs2';
4. Sortarea si gruparea
ORDER BY valoare
SQL include functii care va permit sa raportati valori diferite, valori utile, precum
un numar al rndurilor tabelului. Iata cele mai importante functii in acest sens:
Functie Descriere
count(*) - Numarul rndurilor din tabel
- Numarul rndurilor din tabel care contin
count(coloana) o valoare diferita de NULL n coloana
specificata
count(distinct - Numarul valorilor distincte diferite de
coloana) NULL care apar n coloana specificata
- Valoarea mijlocie (medie) a coloanei
avg(coloana)
numerice specificate
min(coloana) - Valoarea minima din coloana specificata
- Valoarea maxima din coloana
max(coloana)
specificata
sum(coloana) - Suma valorilor din coloana specificata
De exemplu, interogarea urmatoare raporteaza numarul cartilor si pretul mediu
al acestora:
SELECT count(*), avg(pret) FROM carte;
- Datele de iesire vor fi afisate pe o singura linie.
Clauza SQL "AS" specifica un nume nou pentru o coloana sau expresie. Numele
specificat este folosit ca titlu n rapoartele SQL. Clauza "AS" este utila n lucrul
cu functiile din tabelul anterior, va ajuta sa identificati mai usor datele de iesire.
De exemplu, interogarea precedenta poate fi rescrisa pentru a include o clauza
"AS", astfel:
SELECT count(*) AS Carte_Numar,
avg(pret) AS Pret_Mediu
FROM carte;
O alta clauza utila este "GROUP BY", aceasta are urmatoarea forma:
GROUP BY coloana-sortare
HAVING conditie
De exemplu, pentru a include numai cartile al caror atribut "anul" are valoare
mai mare dect 1980, srieti urmatoarea interogare:
SELECT count(*), avg(pret) FROM carte
GROUP BY anul
HAVING anul>1980
ORDER BY anul;
Mai jos sunt afisati operatorii matematici folositi in SQL:
+ Adunare
- Scadere
* Inmultire
/ Impartire
| SAU, la nivel de bit
& SI la nivel de bit
>> Deplasare la dreapta
<< Deplasare la stanga
_ Complement la nivel de bit
1. Expresii si functii
SQL va permite sa formati expresii folosind valori din coloane, valori literale si
functii. Ca si n PHP, puteti controla ordinea de evaluare a expresiilor SQL
folosind paranteze pentru a delimita sub-expresiile care trebuie evaluate mai
intai.
Tabelele urmatoare rezuma functiile MySQL frecvent folosite
2. Uniri
SQL va permite sa obtineti accesul la mai multe tabele ntr-o singura interogare,
n general, aceasta operatie se executa pentru ca datele dintr-un tabel sa poata
fi folosite cu date din alt tabel.
De exemplu, sa presupunem ca baza de date este asemanatoare celei
prezentate mai jos, unde avem doua tabele, primul numit "persoane" iar cel de-
al oilea numit "meserii", si o relatie cheie externa - cheie primara (persoanaid)
asociaza cele doua tabelele.
SOURCE nume_fisier
Fiecare baza de date si fiecare tabela este indentificata printr-un nume. Regulile
de baza MySQL pentru nume de baze de date, tabele, si coloane sunt:
Cand se creaza un tabel in MySQL, trebuie definit tipul de date pe care fiecare
coloana il va contine. Exista trei tipuri principale: Text (strings), Numere,
Data si Ora; si doua tipuri secundare: Liste predefinite si Date binare.
Tipul de date dicteaza ce informatie poate fi stocata si cum, acesta influenteaza
si performanta generala a bazei de date.
Tabelul de mai jos listeaza tipurile de date folosite pentru MySQL, cu o scurta
descriere si cat spatiu ocupa.
Marim
Tip Descriere
e
Diferenta dintre "Tipurile de date pentru text" consta
in numarul maxim de caractere ce poate fi stocat intr-
Stocare text
un camp individual, modul de tratare a spatiilor, si
daca se poate seta o valoare initiala.
lungime Un camp cu lungime fixa de la 0 la 255 de
CHAR(lungime)
bytes caractere. Accepta o valoare initiala.
lungime
Camp cu lungime variabila de la 0 la 65,535
VARCHAR(lungime) + 1 or 2
caractere. Accepta o valoare initiala.
bytes
lungime
TINYTEXT +1 Un sir cu lungime maxima de 255 characters
bytes
TEXT lungime Un sir cu o lungime maxima de 65,535
+2 caractere. Nu poate defini o valoare initiala.
Conectare la MySQL
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
?>
- Aceast cod face conectarea la baza de date numita "dbname", si stocheaza
conexiunea in instanta de obiect $conn.
Daca exista erori la conexiune, mysqli_connect_errno() returneaza codul de
eroare.
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// ceva cod
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Conectare nereusita: '. mysqli_connect_error());
}
$conn->close();
?>
- Cand doriti sa creati o noua baza de date, se adauga doar primele trei
argumente la obiectul mysqli (servername, username si password). Dar daca
vreti sa folosesti un port specific, adaugati un sir gol "" pentru argumentul ce
reprezinta numele bazei de date :
Exemplu: new mysqli('localhost', 'root', 'pass', '', port)
Dupa ce ati realizat o conexiune la o baza de date, puteti crea tabele in ea.
Tabelele sunt elementele care stocheaza datele in baza de date.
Pentru a crea un tabel in MySQL, se foloseste comanda CREATE TABLE, apoi se
apeleaza metoda query().
- Sintaxa:
CREATE TABLE `table_name`
(
`nume_coloana1` tip_date,
`nume_coloana2` tip_date,
`nume_coloana3` tip_date,
....
)
- tip_date specifica tipul de date pe care o coloana le poate contine. Pentru o
lista cu tipurile de date MySQL, vedeti lectia precedenta: PHP MySQL -
Introducere si Tipuri de date.
Dupa "tip_date", se pot specifica si alte atribute optionale pentru fiecare
coloana:
DEFAULT value - Seteaza o valoare initiala care este adaugata cand nici
o alta valoare nu este transferata
Fiecare tabel ar trebui sa aiba o coloana primary key. Valoarea ei trebuie sa fie
unica pentru fiecare inregistrare din tabel.
- Exemplu:
<?php
// conectare la serverul MySQL
$conn = new mysqli('localhost', 'root', 'pass', 'tests');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
$conn->close();
?>
- Acest cod va crea un tabel numic "users" in baza de date "tests", cu cinci
coloane (id , name , pass , email si reg_date), seteaza coloana 'id' ca campul
primary key.
In imaginea de mai jos puteti vedea descrierea tabelului "users".
Valorile de tip String (sir), din interogarea SQL, trebuie sa fie intotdeauna intre
ghilimele.
Pentru a adauga inregistrari noi intr-un tabel MySQL, se foloseste comanda INSERT
INTO.
2) Pentru a doua metoda se specifica atat numele coloanei /coloanelor cat si valorile
care vor fi intoduse:
- Sintaxa:
<?php
// conectare la baza de date "tests"
$conn = new mysqli('localhost', 'root', 'pass', 'tests');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
$conn->close();
?>
MySQL permite INSERT cu mai multor randuri in acelasi timp, separate prin virgula.
- Sintaxa:
Exemplu urmator adauga doua noi randuri in tabelul "users", cu o singura interogare.
<?php
// conectare la baza de date "tests"
$conn = new mysqli('localhost', 'root', '', 'tests');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
$conn->close();
?>
<?php
// conecteaza la baza de date "tests"
$conn = new mysqli('localhost', 'root', 'pass', 'tests');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
$conn->close();
?>
Returneaza:
ID-ul este 4
Formularele HTML sunt de obicei folosite pentru a trimite date la un script pe server.
Aceste date pot fi adaugate si intr-o baza de date.
Pentru a introduce date dintr-un formular intr-o baza de date MySQL, trebuie creat un
formular HTML si un script PHP care receptioneaza date din formular.
Exemplu de formular HTML si un script PHP care poate fi folosit pentru a adauga
valorile din formular in tabelul "users".
Formularul HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Formular HTML pentru insert users</title>
</head>
<body>
</body>
</html>
Cand un utilizator apasa pe butonul "Trimite", datele din formular sunt trimise la
scriptul din fisierul "insert.php".
Fisierul "insert.php":
- preia valorile din formular cu variabila $_POST,
- filtreaza aceste valori cu functii strip_tags() si trim() (pentru a sterge posibile tag-uri
si spatii goale de la inceput si sfarsit),
<?php
$erors = array(); // seteaza un array gol care va contine erorile
$regexp_mail = '/^([a-zA-Z0-9]+[a-zA-Z0-9._%-]*@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4})$/'; //
RegExp pt adresa de e-mail
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// stocheaza valorile intr-un Array, filtrand caracterele speciale pt. a fi folosite in comanda SQL
$adds['name'] = $conn->real_escape_string($_POST['name']);
$adds['pass'] = $conn->real_escape_string($_POST['pass']);
$adds['email'] = $conn->real_escape_string($_POST['email']);
$conn->close();
}
else {
// altfel, daca au aparut erori erori, le adauga intr-un sir si le printeaza
echo implode('<br />', $erors);
}
- Sintaxa:
SELECT nume_coloana/e FROM nume_tabel
- "nume_coloana/e" - este numele coloanei sau coloanelor care vor fi selectate.
Ca sa fie trimisa comanda SQL la baza de date MySQL si pentru a prelua datele
selectate, se foloseste metoda query() a obiectului mysqli.
Cand este folosita cu interogari SELECT, aceasta metoda returneaza un obiect
care contine randurile de date, sau False in caz de eroare.
Pentru a parcurge datele returnate si sa obtineti cate un rand din ele, puteti
folosi metoda fetch_assoc.
Metoda fetch_assoc() returneaza un array asociativ ce contine randurile
preluate, cheile din array reprezinta numele coloanelor.
Cu o bucla while() puteti prelua informatiile din fiecare rand stocat in acel array.
Pentru a afla numarul de randuri returnat de o interogare SELECT, se foloseste
proprietatea num_rows, aplicata la obiectul rezultat.
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
$conn->close();
?>
- Acest exemplu stocheaza datele (obiectul rezultat) returnate de metoda
query() in variabila $result , foloseste proprietatea "num_rows" sa verifice daca
$result contine cel putin un rand. Apoi, cu bucla while() trece prin toate
inregistrarie din obiecul rezultat, folosind metoda "fetch_assoc()" pentru a retine
datele din fiecare rand intr-un Array in variabila $row.
Fiecare apelare a fetch_assoc() returneaza urmatorul rand in setul de rezultate,
pana cand nu mai sunt, si returneaza False.
Pentru a accesa valorile din fiecare rand, se foloseste variabila PHP $row si cheia
cu numele coloanei ($row['id'], ...).
Codul de mai sus va afisa:
id: 1 - name: Marius - pass: faith
id: 2 - name: site-ul-tau - pass: peace
id: 3 - name: I_AM - pass: love
id: 4 - name: PloMar - pass: love_light
Asterisc (*) poate fi folosit pentru a selecta toate coloanele: "SELECT * FROM
nume_tabel", dar este mai bine sa specificati doar coloanele care vreti sa fie
selectate, deoarece procesul de selectare poate fi mai rapid.
Optiunea LIMIT
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
$conn->close();
?>
Optiunea "LIMIT 2" spune MySQL sa returneze primele 2 randuri din rezultat.
Acest exemplu va afisa:
id: 1 - name: Marius - pass: faith
id: 2 - name: site-ul-tau - pass: peace
ORDER BY
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
$conn->close();
?>
- Acest cod selecteaza toate datele stocate in tabelul "users" , si sorteaza
rezultatul in ordine alfabetica dupa coloana "name".
Exemplul de mai sus va afisa:
i
category
d
PHP-
1
MySQL
2 HTML
links
i visi
link
d ts
www.site-ul-tau.net/php-
1 12
mysql/matrice_tablouri.html
www.site-ul-tau.net/php-
1 15
mysql/siruri.html
i visi
link
d ts
2 www.site-ul-tau.net/html/tabele.html 18
2. Selecteaza randurile din coloanele "category" si "link", unde 'id'-ul din tabelul
'categories' are valoarea 1, si id-ul din tabelul 'links' este egal cu id-ul din
'categories'.
SELECT `categories`.`category`, `links`.`link` FROM `categories`, `links`
WHERE `categories`.`id`=1 AND `categories`.`id`=`links`.`id`
Rezultat:
| category | link |
--------------------------------------------------------------
| PHP-MySQL | www.site-ul-tau.net/php-mysql/matrice_tablouri.html |
| PHP-MySQL | www.site-ul-tau.net/php-mysql/siruri.html |
1. Selectare randuri din coloana "link" (tabel 'links') unde valoarea coloanei "id"
corespunde cu id-ul pentru valoarea HTML (din tabelul 'categories').
SELECT `link` FROM `links` WHERE `id`=(SELECT `id` FROM `categories`
WHERE `category`='HTML')
Rezultat:
| link |
---------------------------------------
| www.site-ul-tau.net/html/tabele.html |
RIGHT JOIN
Comanda JOIN combina inregistrarile din doua tabele, folosind valorile comune
din fiecare.
Sunt mai multe tipuri de JOIN: INNER JOIN, LEFT JOIN, RIGHT JOIN; se
folosesc cu o clauza ON ce seteaza conditia de unire.
i
category
d
PHP-
1
MySQL
2 HTML
3 JavaScript
links
i
link
d
www.site-ul-tau.net/php-
1
mysql/matrice_tablouri.html
www.site-ul-tau.net/php-
1
mysql/siruri.html
2 www.site-ul-tau.net/html/tabele.html
INNER JOIN
LEFT JOIN
Comanda LEFT JOIN returneaza toate randurile din tabelul din "stanga"
(tabel1), indiferent daca conditia de unire nu se potriveste cu inregistrarile din al
doilea tabel, din "dreapta (tabel2).
Sintaxa:
SELECT coloana(e) FROM `tabel1` LEFT JOIN `tabel2` ON
`tabel1`.`coloana`=`tabel2`.`coloana`
Daca exista randuri din "tabel2" care nu se potrivesc cu conditia de la partea
ON, "join" va adauga acele randuri in rezultat, dar cu valoarea NULL la "tabel2".
Exemplu: Vom selecta din nou inregistrarile din coloana "category" (din
'categories'), si din coloana "link" (din tabelul 'links'), unde valoarea coloanei
"id" este aceeasi in ambele tabele, dar de data aceasta cu LEFT JOIN.
SELECT `categories`.`category`, `links`.`link` FROM `categories` LEFT JOIN
`links` ON `categories`.`id`=`links`.`id` ORDER BY `categories`.`category`
Rezultat (comparati cu rezultatul din exemplu de mai sus ca sa vedeti
diferenta):
| category | link |
---------------------------------------------------------------
| HTML | www.site-ul-tau.net/html/tabele.html |
| JavaScript | NULL |
| PHP-MySQL | www.site-ul-tau.net/php-mysql/matrice_tablouri.html |
| PHP-MySQL | www.site-ul-tau.net/php-mysql/siruri.html |
RIGHT JOIN
RIGHT JOIN returneaza toate valorile din al doilea tabel, din "dreapta" (tabel2)
si inregistrarile potrivite din primul tabel (tabel1) (NULL in caz de rand
corespondent nepotrivit).
Sintaxa:
SELECT coloana(e) FROM `tabel1` RIGHT JOIN `tabel2` ON
`tabel1`.`coloana`=`tabel2`.`coloana`
Exemplu: Vom selecta iar inregistrarile din coloana "category" (din 'categories'),
si din coloana "link" (din tabelul 'links'), unde valoarea coloanei "id" este aceeasi
in ambele tabele, dar de data aceasta cu RIGHT JOIN.
SELECT `categories`.`category`, `links`.`link` FROM `categories` RIGHT JOIN
`links` ON `categories`.`id`=`links`.`id` ORDER BY `categories`.`category`
Rezultat (comparati cu rezultatul din exemplu de mai sus ca sa vedeti
diferenta):
| category | link |
---------------------------------------------------------------
| HTML | www.site-ul-tau.net/html/tabele.html |
| PHP-MySQL | www.site-ul-tau.net/php-mysql/matrice_tablouri.html |
| PHP-MySQL | www.site-ul-tau.net/php-mysql/siruri.html |
In practica, RIGHT JOIN se foloseste rar, deoarece poate fi inlocuit cu LEFT JOIN
(prin inversarea ordinii tabelelor). Rezultatul de mai sus poate fi obtinut si cu
urmatoarea interogare SELECT, cu LEFT JOIN:
SELECT `categories`.`category`, `links`.`link` FROM `links` LEFT JOIN
`categories` ON `categories`.`id`=`links`.`id` ORDER BY
`categories`.`category`
Pentru a cauta valori specifice, pentru a extrage doar acele inregistrari care respecta
anumite criterii, se adauga o clauza WHERE in interogarea SELECT.
Clauza WHERE este folosita pentru a filtra inregistrarile. Se adauga dupa numele
Tabelul urmator prezinta operatorii cei mai des folositi cu WHERE in instructiunile
MySQL:
BETWEEN min AND Intr-un interval specific (min si WHERE `id` BETWEEN 2
max max) AND 4
NOT BETWEEN min Nu este in intervalul (min si WHERE `id` NOT BETWEEN
AND max max) 2 AND 4
<?php
// conectare la baza de date "tests"
$conn = new mysqli('localhost', 'root', '', 'tests');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
$conn->close();
?>
- Dupa cum observati, nu e necesar sa selectati coloana la care aplicati conditia
WHERE. Coloanele specificate dupa SELECT dicteaza ce coloane sa returneze, iar
coloanele adaugate dupa WHERE determina ce randuri vor fi returnate.
- Nota, in interogarea $sql este folosita variabila ($name) care contine numele, aceasta
variabila este adaugata intre ghilimele simple in interogare pentru ca MySQL sa preia
valoarea ei ca tip sir (string).
Exemplul de mai sus va afisa:
LIKE si NOT LIKE sunt termeni folositi pentru identificare valori de tip sir, in
combinatie cu urmatoarele caractere:
Acesti termeni sunt folositi cu clauza WHERE, iar cautarea este case-insensitive (fara
diferenta intre litere mari si mici).
// ...
?>
- Aceasta clauza WHERE se potriveste cu site-ul-tau, marius, Mars, si asa mai departe,
dar nu Omar.
<?php
// ...
// ...
?>
- Aceasta clauza WHERE se potriveste cu Mar, Omar, Romar, si asa mai departe, dar nu
cu Mars. ('%mar%' se potriveste cu Mars, Marius, Romars, etc.).
<?php
// ...
// ...
?>
- Aceasta interogare va returna toate randurile ale caror valoare "name" nu incepe cu
Mar.
<?php
// ...
// ...
?>
- Aceasta interogare va returna toate randurile ale caror valoare "name" incepe cu Mar
si are patru caractere (Mars, Mara, mar8, etc.).
Interogarile cu termeni LIKE sunt in general mai lente deoarece nu pot profita de
indexi.
Pentru a cauta un simbol procent (%) sau o sublinie (_) in text, le precedati cu
backslash, in acest mod ( \% sau \_ ).
Sublinia poate fi folosita in combinatie cu ea insasi; (exemplu, LIKE '_ _' va
cauta orice combinatie de doua litere).
Cuvantul cheie LIKE trebuie sa fie intotdeauna urmat de un sir, chiar daca
termenul cautat este limitat la numere.
- Exemplu
In lectiile anterioare a fost creat un tabel numita "users" si am adaugat cateva
randuri in el. Asa arata primele doua inregistrari.
i nam passw
email reg_date
d e ord
Mariu name@domain 2011-03-24
1 faith
s .net 09:51:46
site- user@domain. 2011-03-24
2 peace
ul-tau com 10:10:27
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
$conn->close();
?>
Dupa cum observati, clauza WHERE pune doua conditii cu operatorul "AND"
(WHERE `name`='site-ul-tau' AND `id`=2), ii spune serverului MySQL sa
actualizeze numai randurile care au "name='site-ul-tau'" si "id=2". Setand
aceste doua conditii, putem fi siguri ca numai acel rand va fi modificat, nu un alt
rand cu acelasi nume.
De asemenea, puteti sa aplicati optiunea LIMIT pentru a seta cate randuri sa fie
actualizate.
Exemplu:
$sql = "UPDATE `users` SET `email`='[email protected]'
WHERE `name`='site-ul-tau' AND `id`=2 LIMIT 1";
Dupa actualizare, primele doua randuri din tabelul "users" vor arata asa:
i name passwo email reg_date
- Sintaxa:
DELETE FROM nume_tabel WHERE conditie
Clauza WHERE conditie este foarte importanta, ea specifica exact care rand sau
randuri trebuie sterse. Este important sa o folositi, deoarece randurile sterse nu
mai pot fi recuperate, decat daca aveti undeva salvata baza de date.
Daca nu adaugati WHERE, serverul MySQL va sterge toate inregistrarile din
tabel, lasandu-l gol.
Instructiunea DELETE este trimisa la serverul MySQL cu metoda query() a
obiectului mysqli.
- Exemplu
In lectiile anterioare a fost creat un tabel "users" si am adaugat cateva date in
el. Aici puteti vedea cum arata primele 3 randuri.
i passwo
name email reg_date
d rd
2011-03-24
1 Marius faith [email protected]
09:51:46
site- [email protected] 2011-03-27
2 peace
ul-tau om 10:20:58
[email protected] 2011-03-24
3 I_AM love
t 10:10:27
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// interogare DELETE
$sql = "DELETE FROM `users` WHERE `name`='site-ul-tau'";
$conn->close();
?>
- Acest cod va sterge toate randurile din tabelul "users" care au name='site-ul-
tau', astfel, daca in acest tabel sunt mai multi useri (inregistrari) cu numele
"site-ul-tau", MySQL le sterge pe toate.
Ca sa fiti sigur care inregistrare va fi stearsa, puteti sa adaugti inca o conditie in
clauza WHERE (cu operatorul AND), care impreuna cu prima specifica mai exact
ce rand sa fie sters.
De asemenea, se poate aplica optiunea LIMIT ca sa specificati cate randuri sa fie
sterse, din cele conform conditiei.
Example:
$sql = "DELETE FROM `users` WHERE `name`='site-ul-tau'
AND `id`=2 LIMIT 1";
Dupa stergere, primele trei randuri din tabelul "users" vor arata asa:
passwor
id name email reg_date
d
2011-03-24
1 Marius faith [email protected]
09:51:46
[email protected] 2011-03-24
3 I_AM love
et 10:10:27
love_ligh [email protected] 2011-03-24
4 PloMar
t et 14:39:49
- Dupa cum se observa, randul cu name='site-ul-tau' (id=2) a fost sters.
- Daca se executa o interogare DELETE care nu sterge nici o inregistrare
(deoarece conditia WHERE nu se potriveste cu nici un rand), nu veti primi nici o
eroare, si nu va fi afectat vreun rand.
id site nr reg_date
1 www.site-ul-tau.net 5 2011-03-28 07:56:53
2 www.coursesweb.net 8 2011-03-28 07:57:40
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// interogare sql
$sql = "SELECT `site` AS st FROM `sites`";
$conn->close();
?>
In resultatele obtinute, valorile coloanei "site" vor fi returnate intr-un alt nume
de coloana, denumita 'st'.
Afiseaza:
Array ( [st] => www.site-ul-tau.net )
Array ( [st] => www.coursesweb.net )
Se pot folosi mai multe aliasuri intr-o interogare SELECT, cate unul pentru
fiecare coloana:
SELECT coloana1 AS nume1, coloana2 AS nume2 FROM
nume_tabel
Functii MySQL
Cele mai multe din functiile MySQL sunt folosite cu interogarea SELECT pentru
a formata datele returnate, dar puteti folosi functii MySQL si cu alte tipuri de
interogari.
Pentru a aplica o functie intr-o instructiune SELECT, la valoarea unei coloane,
interogarea va arata astfel:
- Sintaxa:
SELECT coloana1, FUNCTIE(coloana2), coloana3 FROM nume_tabel
Nu trebuie sa lasati spatii intre numele functiei si parateza ei.
Functiile pentru text sunt folosite cand se lucreaza cu siruri, pot fi aplicate fie
cu numele coloanelor fie cu valori specifice.
Tabelul de mai jos contine cateva din cele mai utilizate functii MySQL pentru
lucru cu text ("t", poate fi text sau numele unei coloane).
Functie Returneaza
CONCAT(t1, t2, ...) Un nou sir de forma "t1t2".
CONCAT_WS(S, t1, Un nou sir de forma t1St2S... (ignora coloanele care
t2, ...) nu au valori)
LENGTH(t) Numarul de caractere din "t".
Caracterul "y" cel mai aproape de partea stanga din
LEFT(t, y)
"t".
Caracterul "x" cel mai aproape de partea deapta din
RIGHT(t, x)
"t".
TRIM(t) "t" cu spatiile de la capete sterse.
UPPER(t) "t" cu litere mari.
LOWER(t) "t" cu litere mici.
caracterele "y" din "t", incepand de la index "x"
SUBSTRING(t, x, y)
(indexat de le 0).
expr REGEXP Executa o cautare in "expr", dupa o expresie
patern regulata specificata la "patern".
- In urmatorul exemplu vom folosi functia CONCAT() pentru a uni intr-un singur
sir valorile a doua coloane ("site" si "nr"), separate de o liniuta. Acest sir va fi
returnat cu un titlu de alias numit "str":
<?php
// conecteaza la baza de date "tests"
$conn = new mysqli('localhost', 'root', '', 'tests');
$conn->close();
?>
Aliasul "str" este cheia in array ce contine valorile returnate.
Codul de mai sus va returna:
www.site-ul-tau.net - 5
www.coursesweb.net - 8
Pentru lista completa cu functiile MySQL pt. text, vedeti manualul MySQL:
Functii pentru siruri.
Functii numerice
Functia Returneaza
ABS(n) Valoarea absoluta a lui "n".
AVG(col) Valoarea mijlocie (medie) a coloanei specificate.
CEILING(n) Urmatorul cel mai mare numar intreag dupa "n".
FLOOR(n) Valoarea intreaga a lui "n".
FORMAT(n1, "n1" formatat ca un numar cu "n2" zecimale si cu virgula la
n2) fiecare 3 spatii.
MIN(col) Valoarea minima din coloana specificata.
MAX(col) Valoarea maxima din coloana specificata.
Resultatul impartirii lui "n1" la "n2". La fel ca si expresia cu
MOD(n1, n2)
simbolul procent (n1%n2)
POW(n1, n2) "n1" la puterea "n2"
RAND() Un numar aleatoriu intre 0 si 1.0
ROUND(n1,
"n1" rotunjit la "n2" zecimale.
n2)
SQRT(n) Radical din "n".
- In urmatorul exemplu vom selecta coloana "nr", cu functia POW() aplicata ei,
urmata de un alias care va contine valoarea returnata de functia POW():
<?php
// conecteaza la baza de date "tests"
$conn = new mysqli('localhost', 'root', '', 'tests');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// interogare sql
$sql = "SELECT `nr`, POW(`nr`, 3) AS pow3 FROM `sites` ORDER BY pow3";
$conn->close();
?>
Afiseaza:
POW(5, 3) - 125
POW(8, 3) - 512
Coloanele specifice pt. Data si Ora din MySQL sunt destul de flexibile.
Daca vreti sa faceti calcule bazate pe o anume data sau sa returnati numai
numele zilei din saptamana, MySQL are o functie pentru aproape fiecare scop de
lucru cu Data si Ora.
Tabelul urmator contine cateva din cele mai utilizate functii MySQL pt. lucru cu
data si ora. Ele pot fi aplicate fie cu numele coloanelor, fie cu valori specifice
("dt", poate fi o valoare sau numele unei coloane).
Functie Returneaza
HOUR(dt) Ora din "dt".
- Urmatorul exemplu afiseaza numele zilei din saptamana cand ultimul site a
fost inregistrat:
<?php
// conecteaza la baza de date "tests"
$conn = new mysqli('localhost', 'root', '', 'tests');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// interogare sql
$sql = "SELECT `id`, `site`, DAYNAME(`reg_date`) AS weekday FROM `sites` ORDER BY
`reg_date` DESC LIMIT 1";
$conn->close();
?>
Afiseaza:
Ultimul site web: www.coursesweb.net , id: 2 - a fost inregistrata intr-o zi de luni
Daca doriti sa preluati timpul UNIX dintr-o coloana de tip "Data si Timp", folositi
urmatoarea formula:
MySQL
PostgreSQL
SQLite 2 & 3
Firebird
ODBC
Oracle
- Unul din avantajele PDO este acela ca se folosesc functii similare pentru interogarea si
prelucrarea bazelor de date, indiferent de tipul lor (din cele mentionate mai sus).
Script-urile care folosesc interfata PDO pentru conectare la baza de date efectueaza in
general urmatoarele operatii:
1. Conectare la serverul bazei de date, prin apelare new PDO(), obtinand un obiect
pentru lucru cu acea baza de date.
4. Deconectarea de la server.
- Pentru a vedea daca PDO este valabil pentru baza dv. de date, se poate verifica cu
phpinfo(), unde e o sectiune PDO, sau cu metoda PDO::getAvailableDrivers()
foreach(PDO::getAvailableDrivers() as $driver) {
echo $driver.'
';
}
Conectare la MySQL
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'numebd';
$userdb = 'username';
$passdb = 'password';
// Afiseaza mesaj daca s-a reusit conectarea, altfel, retine eventuala eroare
try {
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
echo 'Connected to database';
}
catch(PDOException $e) {
echo $e->getMessage();
}
?>
- In variabila $dbh se creaza obiectul PDO in care vor fi stocate datele transmise de la
serverul MySQL. La aceasta instanta de obiect vor fi aplicate metodele pentru
prelucrarea datelor.
Observati ca s-a folosit formula try() ... catch(), aceasta pentru a nu expune datele de
conectare in cazul vreunei erori.
- De exemplu, folosind aceasta tehnica, daca numele bazei de date este incorect,
returneaza ceva de genul:
- Daca numele sau parola sunt gresite, afiseaza ceva similar cu:
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'numebd';
$userdb = 'username';
$passdb = 'password';
Conectare PostgreSQL
<?php
try {
$dbh = new PDO("pgsql:host=localhost port=5432 dbname=pdo", "username", "password");
echo "PDO connection object created";
}
catch(PDOException $e) {
echo $e->getMessage();
}
?>
Conectare la SQLite
Cand PDO e folosit cu SQLite, trebuie specificata doar calea catre fisierul cu baza de
date. Daca acesta nu exista, va incerca sa-l creeze.
<?php
try {
// connect to SQLite database
$dbh = new PDO("sqlite:/path/to/database.sdb");
}
catch(PDOException $e) {
echo $e->getMessage();
}
?>
Conectare la Firebird
Firebird este o baza de date folosita pe Windows.
<?php
try {
$dbh = new PDO("firebird:dbname=localhost:C:\Programs\Firebird\DATABASE.FDB", "SYSDBA",
"masterkey");
}
catch (PDOException $e) {
echo $e->getMessage();
}
?>
Conectare la Informix
<?php
try {
$dbh = new PDO("informix:DSN=InformixDB", "username", "password");
}
catch (PDOException $e) {
echo $e->getMessage();
}
?>
Conectare la Oracle
<?php
try {
$dbh = new PDO("OCI:dbname=accounts;charset=UTF-8", "username", "password")
}
catch (PDOException $e) {
echo $e->getMessage();
}
Conectare la ODBC
Exista mai multe conexiuni ODBC care pot fi create. Iata conectarea la o baza de date
MS Access, numita "accounts".
<?php
try {
$dbh = new PDO("odbc:Driver={Microsoft Access Driver
(*.mdb)};Dbq=C:\accounts.mdb;Uid=Admin");
}
catch (PDOException $e) {
echo $e->getMessage();
}
?>
Conectare la DBLIB
O alta baza de date specifica Windows.
<?php
$hostdb = "localhost";
$port = 10060;
$namedb = "my_database";
$userdb = "username";
$passdb = "password";
try {
$dbh = new PDO ("dblib:host=$hostdb:$port;dbname=$namedb","$userdb","$passdb");
}
catch (PDOException $e) {
echo $e->getMessage();
}
?>
Conectare la IBM
Urmatorul exemplu arata conectarea la o baza de date IBM DB2 numita "accounts".
<?php
try {
$db = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=accounts;
HOSTNAME=1.2.3,4;PORT=56789;PROTOCOL=TCPIP;", "username", "password");
}
catch (PDOException $e) {
echo $e->getMessage();
}
?>
In mod normal, PHP inchide conexiunea la baza de date dupa ce a fost executat
tot scriptul. Dar deconectarea se poate face si intentionat, atribuind valoare
null la obiectul PDO, dupa cum e prezentat in exemplu de mai jos.
Instanta la acel obiect va fi distrusa, prin urmare, aceasta metoda trebuie
adaugata dupa ce au fost scrise toate instructiunile care trebuie aplicate
obiectului PDO.
- Deconectarea prin aceasta metoda este utila deoarece elibereaza memoria
folosita.
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
// Afiseaza mesaj daca s-a reusit conectarea, altfel, retine eventuala eroare
try {
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
echo 'Connected to database';
/* Instructiuni de lucru cu $dbh */
Crearea unui tabel MySQL folosind PDO se face prin metoda "exec()" si
instructiunea specifica SQL, "CREATE TABLE ...", sintaxa fiind:
$obiectPDO->exec("CREATE TABLE `nume_tabel` (`coloana1`
TIP, `coloana2` TIP, ...)");
- Toate aceste instructiuni se adauga dupa cea de creare a obiectului PDO si
conectare la MySQL.
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
// Creare tabel
$sql = "CREATE TABLE `sites` (`id` int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY , `nume`
varchar(70) NOT NULL DEFAULT '', `categorie` varchar(25), `adresa` varchar(100)) CHARACTER
SET utf8 COLLATE utf8_general_ci";
if($dbh->exec($sql) !== false) echo 'Tabelul sites e creat'; // Daca rezultatul e diferit de
false, afiseaza confirmare
2. INSERT
Dupa ce tabelul MySQL este creat, se pot adauga randuri cu date in el. Acest
lucru se face cu instructiunea INSERT, prin metoda exec(). Sintaxa generala
este:
$obiectPDO->exec("INSERT INTO `nume_tabel` (`coloana1`,
`coloana2`, ...) VALUES ('valoare1', 'valoare2', ...));
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
// Adaugare date
// Daca datele au fost adaugate ($coun nu e false) afiseaza nr. randuri adaugate
if($count !== false) echo 'Nr. randuri adaugate: '. $count;
?>
- Acest cod adauga 3 randuri in tabelul "sites". Variabila $count retine numarul
de randuri afectate (adaugate) si script-ul va afisa:
Nr. randuri adaugate: 3
UPDATE si DELETE sunt instructiuni SQL care modifica date din tabel, dar nu
returneaza un set de rezultate cu randuri si coloane, acestea (la fel ca INSERT)
pot fi executate in PDO cu metoda exec().
3. UPDATE
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
4. DELETE
In urmatorul exemplu se sterg toate randurile din tabelul "sites" care au coloana
"categorie" cu valoarea "educatie" sau "programare".
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'teste';
$userdb = 'username';
$passdb = 'password';
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
Dupa ce tabelul MySQL este creat si are randuri adaugate, se aplica interogarea
SELECT pentru a obtine date din randurile tabelului. Se poate folosi metoda
query(), aceasta returneaza un set de rezultate cu datele obtinute de la MySQL,
sau FALSE in caz de eroare.
In exemplele prezentat aici se foloseste tabelul creat in lectia anterioara, care
arata astfel:
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'teste';
$userdb = 'username';
$passdb = 'password';
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
// Selectare date
$sql = "SELECT * FROM `sites` WHERE `id` IN (1, 3)";
$datas = $dbh->query($sql);
2. Metoda fetch()
fetch() returneaza fiecare rand, unul dupa altul, sau FALSE cand nu mai sunt
randuri. Cu aceasta metoda se poate determina modul in care sunt preluate
datele.
fetch() poate primi optional un argument prin care se determina modul in care
valorile sunt returnate: Array, Obiect, Sir, .... Acest argument este o constanta
care se aplica cu sintaxa:
PDO::FETCH_MOD
In continuare sunt prezentate cateva din aceste moduri, cele mai comune:
FETCH_ASSOC
- Returneaza fiecare rand ca un Array in care cheile sunt numele coloanelor (similar cu
mysql_fetch_assoc).
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'teste';
$userdb = 'username';
$passdb = 'password';
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
FETCH_NUM
- Returneaza fiecare rand ca un Array in care cheile sunt numere consecutive (incepand
de la 0), reprezentand ordinea coloanelor din setul de rezultate (similar cu
mysql_fetch_row).
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'teste';
$userdb = 'username';
$passdb = 'password';
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
// Se parcurg datele
while($row = $datas->fetch(PDO::FETCH_NUM)) {
echo $row[0]. '-'. $row[1]. '<br />'; // Afiseaza datele din prima si a doua coloana
}
1-Cursuri - Tutoriale
2-Curs PHP-MySQL
3-Cursuri Engleza
FETCH_BOTH
- Produce un Array cu ambele tipuri de chei, atat numele coloanelor cat si numere
consecutive reprezentand ordinea coloanelor din setul de rezultate.
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'teste';
$userdb = 'username';
$passdb = 'password';
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
// Se parcurg datele
while($row = $datas->fetch(PDO::FETCH_BOTH)) {
echo $row['id']. '-'. $row['nume']. '<br />'; // Afiseaza datele din coloanele 'id' si 'nume'
echo $row[0]. '-'. $row[1]. '<br />'; // Afiseaza din prima si a doua coloana (aceleasi)
}
2-Curs PHP-MySQL
2-Curs PHP-MySQL
FETCH_OBJ
- Returneaza fiecare rand ca un obiect. Valorile coloanelor se acceseaza ca proprietati
ale obiectului, prin numele lor.
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'teste';
$userdb = 'username';
$passdb = 'password';
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
// Se parcurg datele
while($row = $datas->fetch(PDO::FETCH_OBJ)) {
echo $row->id. '-'. $row->nume. '<br />'; // Afiseaza datele din coloanele 'id' si 'nume'
}
1-Cursuri - Tutoriale
2-Curs PHP-MySQL
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'teste';
$userdb = 'username';
$passdb = 'password';
// Definire clasa
class Sites {
// Definire proprietati
public $id;
public $categorie;
// Metoda a clasei
function makeString() {
// Returneaza un sir cu valorile proprietatilor, cu primul caracter din cuvinte majuscula
return ucwords($this->id. ' - '. $this->categorie). '<br />';
}
}
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
1 - Educatie
2 - Programare
3 - Limbi Straine
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'teste';
$userdb = 'username';
$passdb = 'password';
// Definire clasa
class Sites {
// Definire proprietati
public $id;
public $categorie;
// Metoda a clasei
function makeString() {
// Returneaza un sir cu valorile proprietatilor, primul caracter al cuvintelor majuscula
return ucwords($this->id. ' - '. $this->categorie). '<br />';
}
}
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
1 - Educatie
2 - Programare
3 - Limbi Straine
FETCH_FUNC
- O alta constanta FETCH_ care se aplica la metoda fetchALL() este FETCH_FUNC.
Returneaza un Array cu rezultatul apelarii unei functii, folosind ca argumente coloanele
fiecarui rand din setul de rezultate. Cheile din Array sunt numere consecutive (de la 0),
iar valoarea lor e rezultatul dat de functie pt. fiecare rand.
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
// Definire functie
function test($id, $nume) {
// Returneaza un sir cu datele din parametri, cu majuscule
return strtoupper($id.'-'.$nume);
}
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'teste';
$userdb = 'username';
$passdb = 'password';
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
// Se parcurg datele
while($row = $datas->fetch()) {
echo $row->id. '-'. $row->adresa. '<br />'; // Afiseaza datele din coloanele "id" si "adresa"
3-www.site-ul-tau.net/engleza
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
// Variabila Array cu valori ce trebuie adaugate in interogarea SQL pregatita (pt. ':id' si
':categorie')
$ar_val = array('id'=>2, 'categorie'=>'educatie');
// Variabila Array cu valori ce trebuie adaugate in interogarea SQL pregatita (pt. ':id' si
':categorie')
$ar_val = array('id'=>8, 'categorie'=>'limbi straine');
bindValue si bindParam
$prep->execute();
$id = 2;
$cat = 'programare';
$prep->execute();
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
// Se includ variabilele
$prep->bindParam(':nume', $nume, PDO::PARAM_STR);
$prep->bindParam(':categorie', $categorie, PDO::PARAM_STR);
$prep->bindParam(':adresa', $adresa, PDO::PARAM_STR);
Utilizarea combinatiei prepare() ... execute() este adesea mai rapida decat
query() / execute(). In plus, aceasta formula este utila cand trebuie folosita de
mai multe ori aceeasi declaratie SQL, cu parametri diferiti.
Un alt avantaj e acela ca datele ce trebuie transmise la serverul MySQL sunt mai
clar separate de comanda SQL, in plus sunt si filtrate. De exemplu, daca se
transmite cu o metoda "bind" sirul "a' b' c", PDO include sirul "a\' b\' c".
// E CORECT
$prep = $dbh->prepare("SELECT `coloana` FROM `tabel` WHERE `coloana` LIKE :cuvant");
$prep->bindValue(':cuvant', '%valoare%');
try {
// ... Instructiuni PHP-PDO
}
catch(PDOException $e) {
echo 'Mesaj de eroare personalizat';
echo $e->getCode(). '-'. $e->getMessage(); // Afiseaza
codul si mesajul erorii dat de PHP
}
Cu metoda PDO setAttribute() se pot seta diferite atribute la obiectul PDO prin
care se face conexiunea la baza de date, printre care si modul de raportare a
erorilor retinute cu "try ... catch()".
Formula generala de aplicare a acestei metode este:
$obiectPDO->setAttribute(ATRIBUT, OPTIUNE)
- ATTRIBUT reprezinta tipul atributului care va fi aplicat, iar OPTIUNE este
optiunea lui, cum ar fi:
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
2. beginTransaction
try {
// Conectare si creare obiect PDO
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
1. Exemplu, functie anonima folosita pentru returnarea unei valori intr-o functie
PHP.
<?php
$arr = array(' hello word ', ' Have <b>good day</b>');
// sterge tag-urile si spatiile exterioare din fin fiecare element din array
// Face majuscula prima litera a fiecarui cuvant
$arr = array_map(function($elm){
return ucwords(trim(strip_tags($elm)));
}, $arr);
return $ul;
}
return $c($a);
}
echo test(10); // 15
?>
$a = new A;
echo $a->getVal(); // 2
?>
Este util sa avem pe o pagina din site un formular prin care vizitatorii sa poata
trimite mesaje la o adresa de e-mail.
Am putea lasa pe pagina doar adresa de e-mail la care vizitatorii sa ne poata
contacta, dar aceasta metoda (comoda pt. webmaster) nu este indicata. In
primul rand din cauza programelor bot care circula pe net si colecteaza adresele
de e-mail de pe site-uri pentru ca mai tarziu sa transmita mail-uri spam. In al
doilea rand este mai simplu si mai rapid pentru vizitator sa trimita mesajul
direct de pe site.
In cadrul acestei lectii este explicat un mod simplu de utilizare a limbajului PHP
pentru a expedia la o adresa de e-mail date sub forma de text, preluate de la un
formular HTML.
Pentru a putea expedia datele la adresa de mail, scripturile PHP trebuie sa fie
capabile de a obtine accesul la serviciile SMTP (Simple Mail Transfer Protocol).
Daca folositi serviciile oferite de un "web hosting", majoritatea au implementate
aceste functii.
Daca folositi propriul sistem pentru gazduirea site-ului, sau pentru teste, este
nevoie sa aveti instalat si un server SMTP, acesta preia datele prelucrate de
modulul PHP si le trimite la adresa de e-mail.
- Variabila "$from" trebuie sa contina in sir cuvantul "From: " inaintea adresei de
e-mail, adica asa:
$from="From: [email protected]";
- Daca argumentul "$from" nu este specificat, serverul va transmite automat
aceasta adresa (in functie de cum este configurat). Astfel, cand primim mail-ul,
pe langa subiect vom avea adresa expeditorului, si daca nu este specificata,
putem vedea ceva de genul "[email protected]"
Trimiteti mesaj
E-mail :
Scrie mesajul :
- In Partea 2 invatati cum sa trimiteti mail-uri cu PHP care pot cotine tag-uri
HTML si cod CSS.
Procedeul este simplu, se aplica functia "mail()", dupa cum e explicat in prima
parte (Lectia 31), folosind sintaxa:
<?php
// De la www.site-ul-tau.net
- Daca doriti sa formatati textul folosind cod CSS, acesta trebuie adaugat prin
atributul style="". Nu functioneaza cu tag <style>.
- Pentru aranjamente speciale este indicat sa utilizati tabele si coloane HTML
Pentru a include unul sau mai multe atasamente (fisiere, arhive) intr-un e-mail
trimis cu PHP, procedeul e ceva mai complicat. Pe scurt, trebuie ca datele din
<?php
// Script PHP - Trimitere e-mail cu attasamente si tag-uri HTML
// De la www.site-ul-tau.net ( adaptat de la: http://www.codewalkers.com/c/b/Email-Code/ )
$rand_hash = md5(time());
$mime_boundary = "==Multipart_Boundary_x".$rand_hash."x";
- Cu functia din acest script pot fi trimise si e-mail-uri fara atasament, doar cu
continut text si cod HTML in mesaj, pt. asta trebuie sterse variabilele de tip
"$attach[]".
- Scriptul a fost testat cu succes pe serverul acestui site. Pt. a functiona corect
depinde si de setarile, permisiunile serverului, in principal sa aibe functia mail()
activa.
Pe langa crearea de cod de tip text (HTML, XML, ...), PHP poate fi folosit si
pentru crearea si manipularea de imagini cu diferite formate (GIF, PNG, JPEG,
WBMP si XPM).
PHP are implemetat cateva functii pentru lucru cu informatii legate de imagini,
cum ar fi lungimea, latimea sau extensia imaginii. Pentru crearea de noi imagini
sau manipularea celor existente este necesar sa aveti instalat in PHP o librarii
GD cu functii pentru imagini. Pentru mai multe informatii despre cerinte si
instalare librarie GD, vizitati GD library.
- Daca folositi WampServer sau Xampp, acestea au deja incluse librarii
GD.
Puteti afla informatii despre libraria GD instalata folosind functia gd_info(),
aceasta returneaza o matrice cu informatii despre libraria GD inclusa.
1. Crearea imaginilor
Cam asta e, pe scurt, partea teoretica, acum sa trecem la practica, voi prezenta
pas cu pas un script PHP simplu care va afisa in browser o imagine PNG formata
dintr-un dreptunghi cu fundal albastru si in interior un text.
Scriptul este urmatorul:
<?php
$text = 'Textul din imagine';
// setare culori
$fundal = imagecolorallocate($im, 10, 10, 250);
$text_color = imagecolorallocate($im, 255, 255, 255);
// finalizarea imaginii
imagefill($im, 0, 0, $fundal);
imagestring($im, 4, 10, 15, $text, $text_color);
// curatarea memoriei
imagedestroy($im);
?>
- Acest script va afisa urmatorul rezultat
- Urmatorul pas este definirea culorii pentru fundal si pentru text, pentru
aceasta se foloseste functia imagecolorallocate(), aceasta returneaza un
identificator de culoare care va fi folosit pentru accesarea culorii si preia 4
argumente: primul argument este identificatorul de imagine creat cu
"imagecreate()" (in script este in variabila "$im"), urmatoarele trei argumente
reprezinta valorile RGB (Red, Green, Blue) pentru stabilirea culorii.
- Pentru adaugarea culorii de fundal se foloseste functia imagefill(), care
preia 4 argumente (in script avem "imagefill($im, 0, 0, $fundal);"), argumentele
sunt:
- identificatorul de imagine
1. - identificatorul de imagine
Deoarece un header poate fi trimis numai o data pentru o pagina, si asta este
singura cale de a spune browser-ului ca sunt trimise date de imagine, poate
deveni mai dificil cand se doreste crearea si afisarea mai multor imagini cu PHP.
In acest caz:
a) Puteti folosi scriptul pentru a salva imaginea pe server (dupa cum a fost
explicat mai sus) si apoi folositi etichete <img> pentru afisarea imaginii
- Exemplu:
<?php
$text = 'Textul din imagine';
// setare dimensiuni
$height = 50;
$width = 170;
$im = imagecreate($width, $height);
// setare culori
$fundal = imagecolorallocate($im, 10, 10, 250);
$text_color = imagecolorallocate($im, 255, 255, 255);
// finalizarea imaginii
imagestring($im, 4, 10, 15, $text, $text_color);
// curatarea memoriei
imagedestroy($im);
---
b) O alta metoda este scrierea intr-un fisier php extern a scriptului care
genereaza si afiseaza imaginea, apoi apelati scriptul PHP in atributul src, ca in
exemplul urmator:
<img src="script_img.php" alt="Afisare 1" />
--- <img src="script_img.php" alt="Afisare 2" />
- Unde "script_img.php" este fisierul PHP care genereaza si afiseaza imaginea
In aceasta lectie sunt prezentate, cu exemple, cateva functii utile pentru lucrul
cu imagini generate de PHP.
1. Functia imageline()
Unde
// setare culori
$fundal = imagecolorallocate($im, 10, 10, 250);
$line_color = imagecolorallocate($im, 200, 220, 8);
// crearea imaginii
imagefill($im, 0, 0, $fundal);
imageline($im, 50, 10, 120, 10, $line_color); // prima linie
imageline($im, 40, 20, 130, 20, $line_color); // a doua linie
// curatarea memoriei
imagedestroy($im);
?>
- Comentariile necesare sunt deja in codul scriptului.
- Functia "imageline()", folosita de 2 ori, va crea doua linii dupa coordonatele
dintre paranteze.
- Rezultatul accestui script este imaginea de mai jos
2. Functia imagearc()
Unde
Iata un exemplu:
<?php
// setare dimensiuni
$height = 100;
$width = 100;
// definirea imaginii
$im = imagecreate($width, $height);
// setare culori
$fundal = imagecolorallocate($im, 10, 10, 250);
$cerc_color = imagecolorallocate($im, 220, 220, 8);
$arc_color = imagecolorallocate($im, 250, 2, 2);
// crearea imaginii
imagefill($im, 0, 0, $fundal);
imagearc($im, 30, 25, 20, 20, 0, 360, $cerc_color); // primul cerc
imagearc($im, 70, 25, 20, 20, 0, 360, $cerc_color); // al doilea cerc
imagearc($im, 50, 44, 70, 70, 25, 150, $arc_color); // ultimul arc de cerc
// curatarea memoriei
imagedestroy($im);
?>
- Comentariile necesare sunt deja in codul scriptului.
- Functia "imagearc()", folosita de 3 ori, va crea arce de cerc dupa coordonatele
dintre paranteze. (Testati singuri scriptul, modificand valorile argumentelor)
- Rezultatul accestui script este imaginea de mai jos
3. Functia getimagesize()
Iata un exemplu:
<?php
$img = 'imagini/image.png'; // calea catre fisierul cu imaginea
$size = getimagesize($img);
echo "$size[0] - $size[1] <br /> $size[3]";
?>
- "getimagesize()" preia ca argument imaginea si stocheaza datele (matricea) in
variabila "$size".
- acest script va afisa un rezultat similar cu cel de mai jos (depinde de imaginea
folosita)
270 - 100
width="270" height="100"
4. Functia imagecopy()
- Aceasta functie copie o portiune dintr-o imagine data. Sintaxa generala este
urmatoarea:
Unde
- "x2" si "y2" reprezinta coordonatele de start (x, y) din cadrul celei dea
doua imagini, punctul de unde va incepe adaugarea imaginii rezultata prin
suprafata copiata
Iata un exemplu:
<?php
// preluarea imaginii sursa
$im1 = imagecreatefrompng('imgs/site-ul-tau.png');
// Copierea suprafetei
imagecopy($im2, $im1, 10, 0, 30, 10, 170, 50);
// datele de iesire
header('Content-Type: image/png');
imagepng($im2);
// eliberarea memoriei
imagedestroy($im2);
imagedestroy($im1);
?>
- "imagecopy()" va copia o suprafata din prima imagine, reprezentata prin
"$im1" si o va incadra in cea dea doua imagine, reprezentata prin "$im2"
(conform coordonatelor date).
- Acest script va returna urmatorul rezultat:
5. Functia imagecopyresized()
Unde
- "x2" si "y2" reprezinta coordonatele de start (x, y) din cadrul celei dea
doua imagini, punctul de unde va incepe adaugarea imaginii rezultata prin
suprafata copiata si redimensionata
Iata un exemplu:
<?php
// preluarea imaginii sursa
$im1 = imagecreatefrompng('imgs/site-ul-tau.png');
// datele de iesire
header('Content-Type: image/png');
imagepng($im2);
// eliberarea memoriei
imagedestroy($im2);
imagedestroy($im1);
?>
- "imagecopyresized()" va copia o suprafata din prima imagine =, reprezentata
prin "$im1" si o va redimensiona si incadra in cea dea doua imagine,
reprezentata prin "$im2" (conform coordonatelor date).
- Acest script va returna urmatorul rezultat:
Pe langa date de tip text sau imagini, cu PHP puteti crea si documente in format
PDF (care pot fi citite cu Adobe Acrobat Reader), utile in special cand se doreste
scoaterea la imprimanta a paginilor.
Pentru crearea documentelor de tip PDF pot fi utilizate functii care folosesc
libraria PDFlib. Pentru a folosi functiile specifice acestei librarii trebuie sa aveti
PDFlib instalat si activat in modulul PHP. Incepand cu versiunea PHP 5 si PDFlib 6
functiile acesteia sunt apelate ca metodele unei clase. Pe langa faptul ca unele
sisteme nu au instalata sau activata aceasta librarie de functii, trebuie sa tineti
cont la scrierea programului si de versiunile PHP si PDFlib pe care le folositi,
acest lucru poate fi mai dificil pentru incepatori. Totusi, daca sunteti interesati
gasiti documentatia pentru crearea documentelor PDF cu PDFlib la pagina
creare PDF cu PHP si PDFlib.
O alta modalitate mai simpla de a crea documente PDF cu PHP este folosirea
unei clase numite FDPF. Avantajul este ca aceasta clasa nu necesita instalarea
PDFlib si este gratuita. Aveti nevoie doar de fisierul PHP care contine clasa FPDF
si un director cu fonturile pe care le puteti folosi in documentul PDF, acestea le
puteti descarca de aici Download Clasa FPDF sau de pe site-ul oficial
www.fpdf.org.
Documentatia si tutorialele in limba engleza le puteti descarca si de aici ->
Documentatie Clasa FPDF.
Aceasta lectie are doua parti, in prima parte, aici, voi explica lucrile de baza
(pentru incepatori) in crearea documente PDF folosind class FPDF, iar in partea
a doua sunt prezentate cateva metode mai avansate.
<?php
include('fpdf.php');
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','',16);
$pdf->Cell(36,10,'Text in celula.',1,1,'C');
$pdf->Output();
?>
- Ca si in primul exemplu, dupa ce am inclus fisierul cu clasa FPDF am definit
obiectul de lucru si am setat initializarea paginii si fontul.
- Functia cell() defineste cadrul celulei si textul din ea, aceasta preia mai multe
argumente:
Paragraf
In exemplele de sus ati vazut cum puteti adauga text (pe o linie) folosind
metoda "Text()", totusi, aceasta metoda este utila in cazul sirurilor mai mici, pe
o singura linie, dar sunt situatii cand trebuie sa adaugati in pagina PDF un
continut de text mai mare si care are mai multe linii. In acest caz folositi metoda
write(), aceasta permite adaugarea de continut text cu mai multe linii (formate
cu "\n") sau cand testul ajunge la marginea din dreapta trece automat pe o
noua linie. Sintaxa generala a acestei metode este:
Write(h, continut_text, url)
- unde "h" este inalimea fiecarei linii din paragraf, "continut_text" este textul
adaugat, iar "url" (optional) este o adresa URL care poate fi deschisa cand se da
click pe continut_text.
Linie
Clasa FPDF are si o metoda pe care o puteti folosi pentru trasarea de linii in
pagina, aceasta este metoda line() si are urmatoarea sintaxa:
Line(x1, y1, x2, y2)
- unde "x1" si "y1" sunt coordonatele X si Y pentru punctul de inceput a liniei, iar
"x2" si "y2" sunt coordonatele X si Y pentru punctul de sfarsit a liniei
Link
Sunt mai multe metode, simple sau mai complexe, de a adauga un link in
pagina PDF. Aici veti vedea doua metode simple, pentru ceva mai complicat
studiati tutorialul din documentatia FPDF.
Cea mai simpla metoda e sa scrieti direct adresa URL in continutul textului
(vedeti in exemplul de jos), in pagina va apare adresa asa cum ati scris-o iar
cand se da click pe ea deschide acea adresa.
O alta metoda pe care o puteti folosi e sa adaugati adresa in atributul URL a
uneia din metodele: Cell(), Write() sau Image().
Codul din urmatorul exemplu va afisa o pagina PDF in care este un continut text
pe mai multe linii care are si o adresa URL, urmat de un link intr-o celula, doua
linii si o imagine.
<?php
include('fpdf.php'); // Include clasa FPDF
// Sirul ce contine textul cu mai multe linii, care va fi adaugat in metoda Write()
$sir ="Text adaugat cu metoda Write() \r\n Linie noua din cadrul aceluiasi sir,
\r\n O alta linie care contine si un link www.site-ul-tau.net/php-mysql";
// Adaugarea liniilor
$pdf->SetDrawColor(90,100,200); // Seteaza culoarea pt. linie
$pdf->SetLineWidth(1); // Defineste grosimea liniei
$pdf->line(80,70,100,45); // Deseneaza prima linie
$pdf->line(100,45,120,70); // Deseneaza a doua linie
Atentie, cand doriti sa adaugati in metode atribute care, in ordine, sunt dupa
altele optionale pe care nu doriti sa le folositi, trebuie totusi sa le adaugati si pe
acestea (cu valoare nula "" sau false).
De exempu, in scriptul de mai sus am vrut sa adaug o adresa URL in metoda
"Cell()", care este ultimul atribut, inaintea acestuia fiind atributul pt.
background. Desi nu am folosit o culoare pt. background, am adaugat acest
atribut ca "false" ca sa fie respectata ordinea atributelor recunoscute de clasa.
In partea a doua a acestei lectii veti invata cum sa adaugati elemente mai
avansate in documentul PDF, cum sunt: Header, nr. pagini, tabele sau contint
realizat prin recunoasterea unor tag-uri HTML.
Aceasta lectie prezinta cateva lucruri mai avansate din lucrul cu FPDF
In prima parte (lectia 34) au fost prezentate lucrurile de baza prin care puteti
crea un document PDF cu un continut simplu, folosind clasa FPDF.
In aceasta lectie sunt prezentate aspecte mai avansate din crearea paginilor
PDF cu FPDF. Acestea necesita cunostinte medii de lucru cu functii si clase in
PHP.
Cand aveti un document PDF cu mai multe pagini, puteti crea printr-o singura
funtie un continut care sa fie afisat in partea de sus (Header) sau de jos (Footer)
a fiecarei pagini. De asemenea este util sa afisati si numarul paginilor. Toate
acestea le puteti crea relativ usor cu functiile clasei FPDF.
Pentru obtinerea numarului paginii curente se foloseste metoda PageNo(), iar
ca sa obtineti numarul total de pagini se foloseste metoda AliasNbPages()
Pentru adaugarea unui Header sau Footer in fiecare pagina se foloseste metoda
Header() respectiv Footer() definite intr-o clasa extinsa (copil) a clasei FPDF.
Aceasta clasa copil trebuie creata de dv. inaintea definirii obiectului de lucru, iar
acest obiect va fi creat folosind sintaxa new Clasa_copil() (in loc de "new
FPDF()"), unde "Clasa_copil" e numele clasei extinse in care ati definit metodele
Header() sau /si Footer(). Aceste metode nu mai trebuiesc apelate dupa crearea
obiectului deoarece sunt apelate automat de "AddPage()"
Ca sa intelegeti mai bine, studiati exemplul urmator. Acesta va crea un
document PDF cu 2 pagini, fiecare avand acelasi Header iar in Footer este afisat
nr. pagina curenta si nr. total pagini.
<?php
include('fpdf.php'); // Include clasa FPDF
// Definirea Footer-ului
function Footer() {
$this->SetY(-15); // Seteaza pozitia la 15mm pe verticala fata de subsolul
paginii
$this->SetFont('Arial','I',8); // Seteaza Fontul Italic 8
//Adauga o celula cu text ce contine nr. paginii curente si nr. total de pagini definit prin 'alias'
(care va fi atributul lui AliasNbPages())
$this->Cell(0,10,'Page '.$this->PageNo().'/nr_pgs',0,0,'C');
}
}
// Seteaza un font si adauga mai multe linii de text pt. a depasi o pagina
$pdf->SetFont('Times','',12);
for($i=1; $i<=35; $i++) $pdf->Cell(0,10,'Linia de text numarul '.$i,0,1);
- Studiati cu atentie codul si comentariile din script. Puteti vedea rezultatul aici
-> Demo 5.
- In functiile "Header()" si "Footer()" din clasa copil PDF puteti adauga si alte
functii PHP sau sa apelati cu "$this->" si alte metode ale clasei FPDF (imagini,
culori) pentru a crea continutul dorit. Observati ca metodele "Header()" si
Cand documentul PDF este mare, cu multe pagini, este util sa folositi link-uri
interne care sa redirectioneze printr-un click catre oricare locatie definita de dv.
in document. Acest lucru il puteti face folosind doua metode ale clasei FPDF:
AddLink() si SetLink().
Prima data folositi AddLink() ca sa atribuiti unei variabile valoarea de link intern,
apoi in locatia sau pagina unde doriti sa deschida acest link apelati metoda
SetLink() si intre parantezele ei adaugati variabila setata pentru link-ul intern
respectiv.
Aceeasi variabila o folositi ca atribut URL si pentru textul, celula sau imaginea
care va afisa link-ul (pe care se va da click).
<?php
include('fpdf.php'); // Include clasa FPDF
$pdf->Write(5,'Textul din prima pagina a documentului PDF, cu link intern catre pagina 3,
adaugat prin alta apelare a metodei Write() ce contine textul si variabila definita ca link intern
catre ');
3. Creare tabel
Ca sa creati un tabel intr-un document PDF trebuie sa creati cate o celula pentru
fiecare casuta a tabelului si sa le asezati (definiti) astfel incat sa formeze un
tabel. Pentru aceasta cel mai indicat este folosirea matricelor.
In exemplul urmator este prezentat si explicat un script care preia niste date
dintr-un fisier text (aici state.txt) si le afiseaza intr-un document PDF sub forma
de tabel. Datele din fisier sunt linii de text care contin numele unor state,
capitala, suprafata si populatie; separate prin caracterul punct si virgula (;).
Astfel, va fi creat un tabel cu 4 coloane.
Explicatiile necesare le gasiti in script, studiati cu atentie comentariile adaugate,
acestea va ajuta sa intelegeti modul de lucru si rolul fiecarei linii de cod.
<?php
include('fpdf.php'); // Include clasa FPDF
// Defineste matricea $data care va contine pt. fiecare element cate o matrice cu datele liniei
$data = array();
foreach($lines as $line) $data[]=explode(';',trim($line));
// Seteaza o variabila care determina daca celula va avea fondul definit sau nu
$fill = false;
// Pentru fiecare matrice principala din $data creaza cate o linie cu 4 celule
// In fiecare celula adauga datele din elementele sub-matricei curente (formata cu explode())
// 'LR' reprezinta bordura doar in stanga si dreapta (Left, Right)
foreach($data as $row) {
$this->Cell($w[0],6,$row[0],'LR',0,'L',$fill);
$this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);
$this->Cell($w[2],6,$row[2],'LR',0,'R',$fill);
$this->Cell($w[3],6,$row[3],'LR',0,'R',$fill);
$pdf->SetFont('Arial','',14);
$pdf->AddPage();
$pdf->FancyTable($header,$data); // Apeleaza metoda care aseaza celulele in forma
de tabel
$pdf->Output();
?>
- Documentul PDF generat de acest script il puteti vedea aici -> Demo 7.
In acest ultim exemplu este prezentat un script care recunoaste etichetele html
<b>, <i>, <u>, <a> si <br> sau <br />.
Normal, clasa FPDF creaza documentul PDF cu textul asa cum este scris, fara a
recunoaste tag-urile, totusi, de multe ori este necesara aceasta facilitate si
poate fi creata cu functii specifice adaugate intr-o clasa extinsa.
Aceasta modalitate consta in lucru cu functii pentru siruri. Pe scurt, trebuie
create functii care sa recunoasca tag-urile dorite din sir, apoi, in functie de
semnificatia acestor tag-uri, sa apeleze metodele clasei care sa defineasca stilul
textului afisat in pagina PDF.
Studiati clasa extinsa creata in exemplul de mai jos, pe care o puteti copia si
folosi in programele dv.
<?php
include('fpdf.php'); // Include clasa FPDF
$pdf->Output();
?>
1. Conectarea la server
Pentru conectarea la server prin FTP sunt necesare 3 date importante: adresa
serverului (a domeniului), numele de utilizator si parola de conectare
prin FTP.
La inceput se deschide o conexiune cu serverul, folosind functia ftp_connect(),
aceasta preia ca argument necesar numele serverului, care de obicei are forma
"ftp.server" ("server" poate fi numele domeniului sau adresa IP a acestuia).
Daca deschiderea conexiunii s-a efectuat, functia va returna un ID a conexiunii,
in caz contrar returneaza FALSE.
Dupa deschiderea conexiunii se face autentificarea pe server, pentru aceasta se
foloseste functia ftp_login() care are urmatoarea sintaxa:
ftp_login(conn_id, nume_user, parola)
- unde "conn_id" este id-ul conexiunii returnat de "ftp_connect()"
- "nume_user" este numele de utilizator pentru conectare la FTP, iar "parola"
este parola utilizatorului.
Pentru inchiderea conectarii se foloseste functia ftp_close(), aceasta preia ca
argument id-ul conexiunii.
<?php
// Datele pt. conectare la server
$ftp_server = 'ftp.un_site.net'; // Poate fi de exemplu 'ftp.site-ul-tau.net'
$ftp_user = 'utilizator';
$ftp_pass = 'parola';
// Inchide conexiunea
ftp_close($conn_id);
?>
- Daca s-a efectuat cu succes conectarea si autentificarea pe server, va afisa
mesajul de confirmare, in caz contrar apare mesajul de eroare.
- La urma, "ftp_close($conn_id);" inchide conexiunea si elibereaza memoria
alocata.
Conectarea la server folosind codul de mai sus este primul pas, dupa aceasta
puteti folosi functiile PHP specifice FTP pentru a efectua diferite operatii, cum
sunt: preluarea continutului directoarelor, incarcarea sau descarcarea de fisiere,
crearea de noi directoare sau modificarea permisiunilor CHMOD.
Pentru a prelua continutul unui director (numele fisierelor si directoarelor din el)
se foloseste functia
ftp_nlist(conn_id, director)
- unde "conn_id" este id-ul conexiunii returnat de "ftp_connect()"
- "director" este numele directorului a carui continut va fi preluat
Aceasta functie returneaza o matrice secventiala a carei elemente sunt numele
fiecarui director si fisier din catalogul cautat.
Mai jos este un exemplu practic.
<?php
// Datele pt. conectare la server
$ftp_server = 'ftp.domeniu_site'; // Poate fi de exemplu 'ftp.site-ul-tau.net'
$ftp_user = 'utilizator';
$ftp_pass = 'parola';
// Inchide conexiunea
ftp_close($conn_id);
?>
- Dupa setarea conexiunii si autentificarea pe server, daca conectarea a reusit
este apelata functia "ftp_nlist()", care va stoca in variabila "$continut" matricea
cu numele cataloagelor si fisierelor din directorul radacina (precizat de
argumentul ".").
Daca doriti obtinerea datelor din alt director, de exemplu "www", puteti apela
functia asa: ftp_nlist($conn_id, '/www').
- Pentru afisarea (sau preluarea) numelui fiecarui fisier si director returnat se
parcurge matricea "$continut".
Rezultatul afisat de acest script va fi ceva similar cu cel de jos:
cgi-bin
private
public_html
statistics
www
Pentru incarcarea (upload) unui fisier pe server prin FTP cu PHP se foloseste
functia ftp_put(), aceasta returneaza TRUE daca incarcarea s-a efectuat cu
succes, in caz contrar returneaza FALSE. Are urmatoarea sintaxa:
ftp_put(conn_id, destinatie, fisier, tip_transfer)
- unde "conn_id" este id-ul conexiunii returnat de "ftp_connect()"
- "destinatie" este directorul (si numele fisierului) pe server unde va fi incarcat
fisierul
- "fisier" este numele fisierului care va fi copiat
- "tip_transfer" reprezinta modul incarcarii pe server, acesta poate lua
valoarea FTP_ASCII sau FTP_BINARY
<?php
// Datele pt. conectare la server
$ftp_server = 'ftp.domeniu_site';
$ftp_user = 'utilizator';
$ftp_pass = 'parola';
// Inchide conexiunea
ftp_close($conn_id);
?>
- Daca datele pentru conectare sunt corecte si PHP are permisiuni de transfer
prin FTP, fisierul "test.txt" (aflat pe calculatorul client in directorul
"c:/wamp/www/site/") va fi copiat pe server, in directorul "www/".
- Fisierul va fi incarcat cu acelasi nume, daca doriti sa fie transferat pe server cu
alt nume, modificati la "$destinatie".
<?php
// Datele pt. conectare la server
$ftp_server = 'ftp.domeniu_site';
$ftp_user = 'utilizator';
$ftp_pass = 'parola';
// Inchide conexiunea
ftp_close($conn_id);
?>
- Daca datele pentru conectare sunt corecte si PHP are permisiuni de transfer
prin FTP, fisierul "test.txt" (aflat pe server in directorul "www/") va fi copiat pe
calculatorul client, in directorul "c:/download/".
- Fisierul va fi copiatat cu acelasi nume, daca doriti sa fie descarcat pe calculator
cu alt nume, modificati la "$client". Daca in directorul unde va fi copiat se mai
afla un fisier cu acelasi nume, acesta va fi inlocuit cu cel descarcat de pe server.
Inainte de a crea un director nou prin FTP, setati directorul curent de lucru care
reprezinta locatia unde doriti sa fie creat noul catalog. Pentru aceasta se
foloseste functia ftp_chdir(conn_id, director); "conn_id" este id-ul conexiunii
iar "director" este numele directorului care va fi setat pentru lucru.
Pentru crearea unui director pe server prin FTP se foloseste functia ftp_mkdir(),
in caz de succes returneaza numele noului director creat, iar in caz contrar
returneaza FALSE. Are urmatoarea sintaxa:
ftp_mkdir(conn_id, nume_dir)
- unde "conn_id" este id-ul conexiunii returnat de "ftp_connect()"
- "nume_dir" este numele noului director
<?php
// Datele pt. conectare la server
$ftp_server = 'ftp.domeniu_site';
$ftp_user = 'utilizator';
$ftp_pass = 'parola';
// Inchide conexiunea
ftp_close($conn_id);
?>
- Daca datele pentru conectare sunt corecte si directorul curent de lucru (www/)
este setat cu succes iar PHP are permisiuni de scriere pe server, in catalogul
"www/" va fi creat directorul "un_director".
Pe langa transferul unui fisier complet, PHP ofera si functii pentru transferul unei
anumite parti din continutul unui fisier.
O functie care face acest lucru este ftp_fput(), aceasta incarca pe server
continut dintr-un fisier deschis cu "fopen()", returneaza TRUE in caz de succes,
iar in caz contrar returneaza FALSE. Are urmatoarea sintaxa:
ftp_fput(conn_id, destinatie, pointer_fisier, tip_transfer)
- unde "conn_id" este id-ul conexiunii returnat de "ftp_connect()"
- "destinatie" este directorul de pe server unde va fi incarcat fisierul
- "pointer_fisier" reprezinta identificatorul (pointer-ul) de fisier deschis cu
"fopen()". Retine continutul de la acest pointer pana la sfarsitul fisierului.
- "tip_transfer" reprezinta modul incarcarii pe server, acesta poate lua
valoarea FTP_ASCII sau FTP_BINARY
Iata un exemplu in care este preluata o parte din continutul unui fisier si
transferata intr-un fisier pe server:
<?php
$fisier = "test.txt"; // Fisierul care va fi deschis pt. citire
// Inchide conexiunea
ftp_close($conn_id);
Pe langa functiile prezentate in exemplele de mai sus, PHP are si alte functii
utile pentru lucrul cu fisiere si directoare prin FTP.
Iata cateva din acestea:
1. Creare clasa
class nume_clasa {
$proprietate;
function metoda() {
// Codul functiei
}
}
Pentru a construi o clasa profesionala, cu elemente incluse in PHP 5+, sunt necesare si
alte lucruri care trebuie adaugate.
- La definirea unei clasei si a elementelor din ea (proprietati, metode) se pot aplica
unele atribute speciale prin care se defineste domeniul lor de lucru (de existenta).
Acest atribut se adauga inaintea variabilei sau a cuvantului functions, si poate fi unul
din cuvintele:
class Nume_Clasa {
atribut $proprietate1;
atribut $proprietate2;
.................
atribut function metoda1() {
// Codul functiei
}
atribut function metoda2() {
// Codul functiei
}
.................
}
- Pentru o mai buna organizare, este indicata crearea fiecarei clase intr-un fisier PHP
separat si cu o denumire de forma "class.Nume_Clasa.php". Acest lucru nu e
obligatorriu, doar ca indicatie; clasa poate fi creata si in scriptul unde e folosita.
Iata un exemplu de clasa simpla, ce contine doua proprietati, prima cu atribut public
(denumita $site), a doua private (denumita $categorie) si o metoda cu atribut public
(cu numele "pagini").
Exemplu SiteClas
<?php
// Se defineste clasa SiteClas
class SiteClas {
2. Utilizare clasa
Iata cum poate fi utilizata clasa "SiteClas" prezentata mai sus (pt. explicatii, studiati si
comentariile din cod).
<?php
include('class.SiteClas.php'); // Include clasa
www.site-ul-tau.net/
www.site-ul-tau.net/php-mysq/oop-clase-obiecte.html
www.alt-site.net/php-mysq/oop-clase-obiecte.html
Daca se incearca apelarea proprietatii private (aici "categorie"), de ex.: echo $objSite-
>categorie; , va determina o eroare ca cea de jos. Aceasta proprietate fiind declarata
private poate fi utilizata doar in codul din interiorul clasei.
Valoarea data unei proprietati definita in clasa poate fi de orice tip: sir (string),
numar, Array sau Object.
3. Metoda constructor
Iata o noua versiune a clasei "SiteClas", care include si metoda constructor, plus o
metoda cu atribut protected.
<?php
// Se defineste clasa SiteClas
class SiteClas {
public $site = 'www.site-ul-tau.net/'; // Proprietate publica
private $categorie = 'php-mysq/'; // Proprietate privata
// Metoda protected
protected function Mesaj() {
// Returneaza un mesaj cu proprietatea 'categorie'
return 'Categoria de cursuri '. $this->categorie;
}
// Creare metoda, preia un argument
public function pagini($pag) {
// Afiseaza adresa URL formata din valoarea celor 2 proprietati si argumentul primit
echo '<br />'. $this->site. $this->categorie. $pag;
}
}
?>
<?php
include('class.SiteClas.php'); // Include clasa
Dar se pot declara parametri cu valoare deja atribuita, astfel, argumentul pentru ei
devine optional.
De ex., in clasa Test de mai jos, metoda constructor e definita cu parametru
$nume='Tu'.
<?php
class Test {
// Constructor (cu un parametru cu valoare predefinita)
public function __construct($nume='Tu') {
echo '<br />Salut '. $nume;
}
}
?>
- Daca instanta e creata fara argument, metoda constructor va folosi parametru $nume
cu valoarea lui prestabilita ("Tu"), iar cand e adaugat argument, preia valoarea
acestuia; dupa cum arata rezultatul afisat de scriptul urmator, in care se creaza doua
instante de obiect la clasa Test.
<?php
Salut Tu
Salut Marius
Variabilele (proprietatile) create intr-o clasa pot avea de la inceput o valoare sau
pot fi doar simplu declarate, urmand ca valoarea lor sa fie atribuita prin
intermediul unei functii (metode). Aceasta functie e denumita generic Metoda
Accessor, e la fel ca oricare alta metoda, doar ca scopul ei este de a atribui
valori proprietatilor; in rest, se construieste si se apeleaza la fel ca celelalte.
Ca sa vedeti cum functioneaza "metoda accessor", incercati urmatorul exemplu,
in care este creata o clasa "SiteClas" cu doua proprietati ('site' si 'categorie'),
ambele fara valoare, iar metoda Constructor e folosita si ca accesor, atribuie
valori proprietatilor prin parametri ei.
<?php
// Se defineste clasa SiteClas
class SiteClas {
public $site; // Proprietate declarata fara valoare
private $categorie; // Proprietate privata, fara valoare
// Constructor
public function __construct($site, $categorie) {
// Atribuie proprietatilor valoarea din parametri
$this->site = $site;
$this->categorie = $categorie;
}
// Constructor
public function __construct($site, $categorie) {
// Atribuie proprietatilor valoarea din parametri
$this->site = $site;
$this->categorie = $categorie;
}
3. Metoda Destructor
<?php
// Clasa Test
class Test {
private $nume;
// Constructor
public function __construct($nume) {
// Atribuie proprietatii 'nume' valoarea din parametru
// si afiseaza un mesaj
$this->nume = $nume;
echo 'Bine ai venit '. $this->nume. '<br />';
}
// Metoda Destructor
function __destruct() {
echo 'Cu bine '. $this->nume;
}
}
?>
- Ca sa testam efectul metodei __destruct, se foloseste urmatorul script (vedeti
explicatiile din cod).
<?php
// Creare instanta de obiect la clasa Test
$obj = new Test('Mar');
Iata un exemplu din care se intelege mai bine. In clasa urmatoare, denumita
"elStatic" se definesc doua proprietati statice: una cu atribut "private" (site), a
doua publica (id); o metoda constructor si alta statica.
<?php
// Clasa elStatic
class elStatic {
// Definire proprietati statice
static private $site = 'www.site-ul-tau.net'; // Privata
static public $id = 78; // Publica
// Constructor
public function __construct($site) {
// Daca parametru $site e de tip String si cel putin 4 caractere
// Atribuie valoarea la proprietatea "site" si apeleaza metoda getProp()
// Altfel, seteaza un mesaj de eroare
if(is_string($site) && strlen($site)>3) {
elStatic::$site = $site;
self::getProp(); // Apelare prin cuvantul special self
}
else throw new Exception('Valoare incorecta pt. site');
}
// Metoda statica
static public function getProp() {
// Afiseaza valoarea proprietatilor statice (folosind numele clasei, dar si cuvantul self )
echo '<br /> ID = '. elStatic::$id. ' - site: '. self::$site;
}
}
?>
- Vedeti explicatiile din cod si modul de lucru, cum sunt accesate proprietatile si
metoda statica.
- Deoarece elementele statice apartin direct clasei, pentru utilizarea lor nu e
nevoie de crearea unei instante la aceasta clasa. Dar se pot folosi si instante,
acestea determina auto-apelarea metodei constructor, dupa cum puteti vedea
in scriptul urmator, care foloseste elemente din clasa "elStatic" si o instanta la
ea.
<?php
echo elStatic::$id; // Afiseaza valoarea proprietatii statice "id"
elStatic::getProp(); // Apeleaza metoda statica getProp()
$this face referire la instanta de obiect curenta, self se refera la clasa curenta.
La pagina Functii - clase si obiecte sunt prezentate cateva functii PHP pentru
Clase si Obiecte.
// Constructor
public function __construct($site) {
// Daca parametru $site e un Sir cu cel putin 5 caractere, atribuie valoarea la proprietatea
"site"
// Altfel, seteaza un mesaj de eroare
if(is_string($site) && strlen($site)>4) $this->site = $site;
else throw new Exception('Valoare incorecta pt. site');
}
// Metoda getPag()
public function getPag($pag) {
// Defineste si returneaza adresa URL a paginii
$url = $this->site. '/'. $this->categorie. '/'. $pag;
return $url;
}
}
?>
- Metoda Constructor atribuie valoarea din parametru $site la proprietatea
"site".
- Metoda getPag() returneaza o adresa URL formata din proprietatile clasei si
parametru ei.
Salvam aceasta clasa intr-un fisier "class.Site.php".
Aceasta clasa poate fi utilizata pentru afisarea unui sir cu o adresa URL, prin
apelarea metodei getPag(). Daca vrem sa obtinem aceasta adresa intr-un tag
HTML tip link (<a>) se poate crea o noua metoda, pentru alta facilitate alta
metoda, si tot asa se aglomereaza codul clasei, fapt ce devine o problema in
cazul unor clase mari. O alta varianta este crearea unei sub-clase extinse din
aceasta. Sub-clasa (copil) are abilitatea de a mosteni /utiliza toate proprietatile
si metodele definite ca publice si protected in clasa de baza (parinte) ca si cum
ar fi create in ea (fara sa mai fie scrise inca o data). Astfel, in clasa copil se
creaza doar instructiunile cu noua functie pe care o dorim, si nici nu mai trebuie
modificata clasa parinte.
In continuarea acestui exemplu se creaza o alta clasa, denumita LinkSite, ca
extindere a clasei Site. Ea contine doar o metoda getLink() pentru afisarea unui
link.
<?php
include('class.Site.php'); // Include clasa parinte (Site)
2. Redefinire metode
Iata o alta sub-clasa (PagSite) extinsa din Site. Aici se adauga si o metoda
"__construct()" care o va anula pe cea din clasa parinte, se rescrie si metoda
getPag().
3. Metode finale
In exemplu prezentat mai sus se vede cum o metoda din clasa de baza poate fi
rescrisa in sub-clasa copil, dandu-i alta functionalitate. Sunt situatii in care nu se
doreste ca o metoda sa poata fi rescrisa, in acest caz, prin adaugarea cuvantului
final la inceputul declararii metodei se blocheaaaza posibilitatea rescrierii ei.
- De exemplu:
<?php
4. Clase finale
<?php
// Clasa Baza
final class Baza {
// ... Instructiuni
}
Iata un exemplu din care se intelege mai bine rolul lor. O clasa in care sunt
folosite aceste metode, se creaza o instanta de obiect la ea apoi e accesata o
proprietate inexistenta.
<?php
// Definire clasa AClas
class AClas {
// Proprietate care va retine valori atribuite unor proprietati nedeclarate
public $prop = array();
// Metoda magica __set() (pt. cand se atribuie valori unor proprietati nedefinite)
public function __set($name, $value) {
// Adauga in $prop element cu cheia $name si valoarea value
$this->prop[$name] = $value;
echo 'Proprietatea <b>'. $name. '</b> nu exista. S-a atribuit valoarea <i>'. $value. "</i> la
proprietatea: <b>prop['$name']</b><br />";
}
}
2. Metoda __call
Metoda magica __call() e creata pentru cazuri cand sunt apelate metode
inexistente. Sintaxa ei este:
__call($nume, $array_argumente)
- $nume reprezinta numele metodei apelate
- in $array_argumente sunt retinute intr-un Array argumentele adaugate la
apelarea metodei.
3. Metoda __toString
// Metoda Constructor
public function __construct($mesaj) {
// Atribuie valoarea din parametru la proprietatea "mesaj"
$this->mesaj = $mesaj;
}
Mai sunt si alte metode magice, mai putin folosite, cum ar fi: __isset (se
apeleaza cand e verificata cu "isset()" o proprietate inexistenta), __invoke (se
executa cand instanta de obiect e apelata ca o functie), si altele; le puteti gasi
la pagina oficiala PHP.net Metode Magice
<?php
// Definire clasa abstracta
abstract class Fructe {
protected $color; // Proprietate
<?php
// Definire clasa copil, extinsa din cea abstracta
class Mere extends Fructe {
private $kg; // Proprietate
Fatal error: Class Fructe contains 1 abstract method and must therefore be declared
abstract or implement the remaining methods (Mere::Stoc) in...
- Sub-clasele care extind o clasa abstracta pot fi utilizate normal, se pot crea si folosi
instante de obiect la ele, mostenesc si pot folosi elementele cu atribut "public" si
"protected" din cea parinte.
De exemplu:
<?php
// Creare instanta de obiect la clasa Mere si apelare metode
2. Interfaces
Creare interface
interface numeInterfata {
public function numeMetoda();
public function altaMetoda()
...........
}
- La declararea metodelor in Interface nu se adauga acoladele sau codul lor, si nici alt
atribut diferit de "public".
Implementare interface
Dupa ce a fost definit tiparul "interface", se pot crea clase care implementeaza
metodele stabilite in acel tipar, respectand si numarul de parametri.
Implementarea se face adaugand cuvantul implements si numele Interfatei la
definirea claselor, dupa numele lor.
class NumeClasa implements numeInterfata {
// Instructiuni
}
Acestea trebuie sa contina in corpul lor toate metodele definite in "interface", cu
atribut "public", si numarul de parametri stabiliti pt. fiecare (numele la
parametri poate fi diferit). Pe langa acestea pot contine si alte metode.
<?php
// Creare clasa care aplica Interfata ITest
class WebDevelopment implements ITest {
// Definire proprietate 'link' (cu atribut "protected")
protected $link = 'www.site-ul-tau.net';
<?php
// Creare clasa care aplica Interfata ITest
class LimbiStraine implements ITest {
// Definire proprietate
protected $adr = 'www.site-ul-tau.net/';
// Returneaza valoarea unei variabile din ea (re), ce preia argumentele "nr", "gen" si
proprietatea "adr"
public function Tutoriale($gen, $nr) {
$re = $nr.'-'. $this->adr. $gen;
return $re;
}
}
?>
Intr-un script PHP se scrie urmatorul cod:
<?php
// Se includ fisierele cu clasele create mai sus (daca sunt in fisiere externe): ITest (Interfata),
WebDevelopment si LimbiStraine
include('interf.ITest.php'); // Interface
include('class.WebDevelopment.php');
include('class.LimbiStraine.php');
// Creare functie care accepta doar argument cu obiect la clasele care au implementata Interfata
"ITest"
function cursuri(ITest $obj) {
// Apeleaza metodele comune (stabilite in ITest) prin parametru $obj
echo '<br />'. $obj->Links();
echo '<br />'. $obj->Tutoriale('php-mysql', 4);
}
www.site-ul-tau.net
php-mysql-4
Cale buna
4-www.site-ul-tau.net/php-mysql
Pentru a intelege mai bine, studiati exemplu urmator si comentariile din cod.
<?php
// Definire clasa AClas
class AClas {
public function aMet() {
return 'Metoda clasa AClas';
}
}
// Functie definita sa accepte doar instante de obiect ale clasei AClas (si sub-clase ale ei)
function fCls(AClas $objPar) {
echo $objPar->aMet(). '<br />';
}
<?php
// Definire clasa AClas
class AClas {
public function aMet() {
return 'Metoda clasa AClas';
}
}
Aceasta lectie arata cum se pot accesa mai multe metode inlantuite in
PHP OOP.
Inlantuirea metodelor inseamna accesarea mai multor metode, sau functii ale
unei clase, intr-o singura instructune.
$obiect->metoda_1()->metoda_2()
Cerinta prin care se pot accesa metode inlantuite este ca metoda precedenta sa
returneze instanta de obiect, folosind: return $this in codul metodei precedente
(metoda_1() ).
- Iata un exemplu, o clasa PHP prin care se pot calcula aria si perimetrul
dreptunghiului (vedeti comentariile din cod si testati-l).
class Rectangle {
public $x = 0;
public $y = 0;
// returneaza aria
public function area(){
return $this->x * $this->y;
}
// returneaza perimetru
public function perimeter(){
return 2 * ($this->x + $this->y);
}
}
Se pot apela mai mult de doua metode inlantuite, tehnica e aceeasi, toate
metodele accesate precedent trebuie sa returneze instanta de obiect.
- Iata un exemplu de inlantuire trei metode. O clasa PHP care defineste un tag
HTML, cu ID, atribut "class" si continut (studiati codul si testati-l).
class setTag {
private $id = ''; // atributul id
private $class = ''; // atributul class
// seteaza $id
public function setId($id){
$this->id = ' id="'. $id .'"';
// seteaza $class
// apeleaza metodele inlantuite pt. setare ID, "class", creaza un <div> cu aceste atribute si
continut
echo $obTag->setId('some_id')->setClass('cls')->getTagCnt($tag, $cnt);
/* Rezultat:
<div id="some_id" class="cls">http://www.site-ul-tau.net</div>
*/
Instructiunea cu metodele inlantuite din codul de mai sus:
echo $obTag->setId('some_id')->setClass('cls')->getTagCnt($tag, $cnt);
E la fel cu acest cod:
// seteaza pe rand ID-ul, "class" si afiseaza tag-ul cu continutul
$obTag->setId('some_id');
$obTag->setClass('cls');
echo $obTag->getTagCnt($tag, $cnt);
PHP getElementById si
getElementsByTagName
getElementsByTagName()
getElementById
getElementsByTagName
Rezultat:
cweb - www.CoursesWeb.net
mp - www.site-ul-tau.net
// Array ([0] => Curs gratuit PHP [1] => URL: http://www.coursesweb.net [2] => PHP
getElementById si getElementsByTagName )
?>
Clasa PHP DOMElement contine metode care pot fi utilizate pentru: citire, setare
si stergere atribute in documentul HTML incarcat in obiect DOMDocument.
getAttribute
Rezultat:
http://www.coursesweb.net/
http://www.site-ul-tau.net/
http://www.php.net/
hasAttribute
Rezultat:
dv1 - Curs gratuit PHP-MySQL.
did - Resurse Web Development.
setAttribute
Rezultat:
<body>
<p class="newcls">Lectii gratuite PHP-MySQL.</p>
<p class="newcls">URL: http://www.coursesweb.net/php-mysql/</p>
<p class="newcls">Resurse Web Development.</p>
</body>
removeAttribute
Rezulta:
<body>
<p>Lectii gratuite PHP-MySQL.</p>
<p class="othercls">Cursuri programare web.</p>
</body>
Documente XML
1. Despre XML
o <?xml version="1.0"?>
Caracterele &, <, >, ', " sunt restrictionate in interiorul datelor, putand fi
folosite prin escapare, cu forma: &, <, >, ', "
Datele astfel stocate (cum puteti vedea in exemplul de sus) pot fi relativ usor
citite si intelese de om (putand fi modificate simplu daca e nevoie) dar si de un
limbaj de programare (PHP, ASP) care le preia din fisierul .xml, le prelucreaza si
le poate aranja, manipula si transmite catre o alta aplicatie, precum un
navigator (browser) web.
In practica se folosesc de obicei pentru stocarea datelor baze de date SQL, iar
acest format XML este de preferat cand se doreste utilizarea acestor date de
catre mai mullti agenti, in general in scop de citire; transmiterea fiind mai
rapida si economica, de exemplu: Stiri, Meteo, Clasamente, etc.
Aici apare rolul important al limbajului PHP, care, dupa ce a preluat aceste date
din fisierul .xml (ce poate fi pe alt server) le poate include intr-o pagina HTML
pentru a fi afisate in browser, sau introduce intro alta baza de date mai mare.
PHP are functii speciale pentru citirea, recunoasterea si manipularea datelor din
format XML si chiar pentru crearea, scrierea de documente XML (daca are
permisiuni de scriere pe server). Vor fi aratate in tutorialele (lectiile urmatoare.
Cerintele, criteriile, pentru scrierea unui document XML corect sunt simple si
minime. Totusi, un document XML valid si usor de inteles are nevoie sa urmeze
anumite reguli stabilite, cunoscute generic ca DTD (Document Type Definition).
Ca sa intelegeti ce este si la ce e nevoie DTD, studiati urmatorul exemplu in
comparatie cu cel de sus.
- Astfel, dand o copie a acestei liste oricui are nevoie de acest document XML,
va ajuta la intelegerea mai rapida si usoara a structurii datelor pentru a le folosi
sau adauga corect altele noi.
Se poate lucra in PHP cu datele din XML dupa ce a fost inteleasa structura lor.
Setul de reguli DTD (Document Type Definition) poate fi specificat (scris) direct
in documentul XML (precum documentatiile in PHP), intr-un tag special !
DOCTYPE (document type declaration) si cu o sintaxa specifica.
Exemplu listei de sus este pentru intelegerea de catre alte persoane, dar exista
o sintaxa standard DTD care se adauga de obicei la inceputul fisierului XML.
Pentru obiectul acestui curs nu e nevoie de cunostinte mai multe despre asta,
vedeti totusi cum e in exemplul urmator.
Ca sa intelegeti cum se poate adauga setul de reguli standard DTD direct in
XML, vedeti exemplul urmator (partea scrisa ingrosat).
<?xml version="1.0"?>
In cazul aceluiasi DTD de mai sus, dar in fisier extern, "recipe.dtd" ar arata
astfel:
<!ELEMENT recipe (ingredients, directions, servings)>
<!ATTLIST recipe name CDATA #REQUIRED>
<!ELEMENT ingredients (#PCDATA)>
<!ELEMENT directions (#PCDATA)>
<!ELEMENT servings (#PCDATA)>
- Fara !DOCTYPE si paranteze patrate.
- Prin urmare, un document XML valid este acela care are un format
corect, respecta minimile reguli de sintaxa, dar contine si un DTD.
SAX
- SAX este mai usor de invatat, dar trateaza in esenta XML ca un sir de date.
Acest lucru face dificila adaugarea de noi elemente sau atribute, ori modificarea
unuia anume.
- SAX e util pt. lucruri repetitive ce pot fi aplicate tuturor elementelor de acelasi
tip. De exemplu, inlocuirea uni anumit element cu tag HTML pt. a transforma
XML in HTML.
DOM
SimpleXML
- SimpleXML lucreaza cel mai bine pentru deschiderea si citirea rapida a datelor
unui document XML, converteste elementele si atributele din XML in variabile
native PHP (siruri, matrice) care pot fi utilizate dupa cum se face normal cand
sunt scrise in PHP.
2. DOM XML
- Codul PHP pentru crearea acestuia este urmatorul. Explicatiile necesare le gasiti in
cod.
<?php
$doc = new DomDocument('1.0', 'utf-8'); // Se creaza in memorie un nou
obiect DOM
$root = $doc->createElement('html'); // Se creaza primul obiect element,
radacina
$root = $doc->appendChild($root); // Se adauga in structura documentului,
ca element
$body = $doc->createElement('body'); // Se creaza un alt element, 'body'
$body = $root->appendChild($body); // Se adauga 'body' ca element copil in
radacina
$body->setAttribute('bgcolor', '#e8e8fe'); // Se seteaza un atribut pt. elementul doi
(body)
$graff = $doc->createElement('p'); // Se creaza un alt element, 'p'
$graff = $body->appendChild($graff); // Se adauga 'p' ca element copil in 'body'
$text = $doc->createTextNode('Un text pentru continut'); // Se creaza un continut text
$text = $graff->appendChild($text); // Se adauga continutul text in 'p'
<?php
$file = 'exemplu_dom.xml'; // Calea si numele fisierului .xml
// Creaza noul element dupa 'p' (in elementul Parinte unde se afla si 'p'), cu nume si
continut text
$element_nou = $doc->createElement('div', 'Acesta este elementul nou adaugat');
$node->parentNode->appendChild($element_nou); // Adauga in elementul
parinte noul element creat
}
}
// Daca poate salva noul continut XML (din obiectul $doc) intr-un fisier .xml
// Preia continutul si intr-un sir (cu "saveXML()") pt. a afisa rezultatul obtinut
if($doc->save('exemplu2_dom.xml')) {
echo htmlentities($doc->saveXML());
}
- O lista cu mai multe functii utile in lucrul cu DOM si XML in PHP gasiti la pagina ->
Functii DOM XML
nextSibling - Obtine nodul urmator dupa cel curent, din acelasi parinte.
- Functii de verificare:
o 1 - XML_ELEMENT_NODE
2 - XML_ATTRIBUTE_NODE
3 - XML_TEXT_NODE
4 - XML_CDATA_SECTION_NODE
5 - XML_ENTITY_REFERENCE_NODE
6 - XML_ENTITY_NODE
7 - XML_PROCESSING_INSTRUCTION_NODE
8 - XML_COMMENT_NODE
9 - XML_DOCUMENT_NODE
10 - XML_DOCUMENT_TYPE_NODE
11 - XML_DOCUMENT_FRAGMENT_NODE
12 - XML_NOTATION_NODE
Exemplu de aplicare
// Daca al doilea nod din $nods_sube are atributul 'nume', ii afiseaza valoarea
if($nods_sube->item(1)->hasAttributes()) {
echo '<br>'. $nods_sube->item(1)->getAttribute('nume'); // se2
}
// Adauga textul din $text_nou la al doilea element din $dods_sube, dupa continutul text pe care
deja il are
$nods_sube->item(1)->appendChild($text_nou);
// Sterge primul element din $nods_sube (apeland functia din parintele acestuia)
$parent_sube->removeChild($nods_sube->item(0));
// Adauga sub forma de sir continutul obiectului rezultat dupa aceste prelucrari
$doc_fin = $doc->saveXML();
1. Utilizarea SAX
// Functie apelata de fiecare data cand sunt intalnite caractere de date (continut text) in element
// Pe langa $parser (analizatorul), $value stocheaza valoarea elementului intalnit (continutul-
text)
function characterData($parser, $value) {
// Aici pot fi manipulate datele din $value
echo "$value <br>"; // Afiseaza valoarea transmisa functiei
}
// Se defineste analizatoru care va fi apelat alaturi de functiile pentru evenimente (definite mai
sus)
// Pentru a utiliza standardul ISO-8859-1, se sterge parametru 'utf-8'
$simpleparser = xml_parser_create('utf-8');
// Daca se doreste anularea preluarii cu majuscule (se sterge // din fata functiei)
// xml_parser_set_option($simpleparser, XML_OPTION_CASE_FOLDING, 0);
2. Functii SAX
xml_set_element_handler(parser, start_element_handler,
end_element_handler) - Aceasta functie seteaza evenimentele (functiile
definite de utilizator) ce trebuiesc apelate la inceputul, apoi inchiderea,
unui element.
- Urmatorul script preia si afisaza cateva date din acest document XML
(explicatiile necesare sunt in cod).
<?php
$obj = simplexml_load_file("exemplu_simplexml.xml"); // Calea si numele fisierului .xml
$titlu = $obj->titlu; // Preia toate elementele cu nume "titlu" (intr-o variabila tip
array)
$text = $obj->titlu[0]->text; // Preia toate elementele cu nume "text" din primul element
"titlu"
// Parcurge matricea cu $titlu si preia intr-un array elementele "autor" si "pret" din fiecare
<?php
$obj = simplexml_load_file("exemplu_simplexml.xml"); // Calea si numele fisierului .xml
$titlu = $obj->titlu; // Preia toate elementele cu nume "titlu" (intr-o variabila tip
array)
// Modifica valoarea atributului 'nume' din elementul "autor" al primul element "titlu"
$titlu[0]->autor['nume'] = 'Nume Modificat';
// Folosind sistemul de lucru cu array, creaza inca un element "autor" (fiind al doilea cu acelasi
nume, are indice [key] 1)
$titlu[0]->autor[1] = 'Alt autor';
// Tot cu sistemul de matrice, adauga in al doilea element "autor" inca o cheie 'atribut', cu o
valoare, care vor deveni atributul elementului
$titlu[0]->autor[1]['atribut'] = 'Atribut_adaugat';
<?php
$conn = mysql_connect( "localhost", "Marius", "mypass")
or die("Unable to connect to MySQL");
print "Connected to MySQL <br />";
?>
In acest exemplu, serverul MySQL ruleaza pe "localhost" ca si modulul PHP,
utilizatorul este "Marius" iar parola "mypass".
Dupa executia acestui script, daca nu se reuseste conectarea la MySQL, va
aparea mesajul "Unable to connect to MySQL", in caz de reusita, apare mesajul
"Connected to MySQL"
mysql_close();
?>
Nici una din cele doua functii nu necesita argumente. Functia mysql_errno()
returneaza un cod numeric de eroare, n timp ce functia mysql_error()
returneaza un sir care descrie eroarea. Daca nu s-a produs nici o eroare, codul
numeric al erorii este zero si descrierea are ca valoare un sir vid.
Informatiile de eroare sunt disponibile numai daca este activa o conexiune cu
serverul MySQL. Prin urmare, intai trebuie sa se reuseasca conectarea la MySQL.
Iata cum puteti folosi functiile respective pentru a verifica modul de operare a
functiei mysql_select_db() (aceasta selecteaza baza de date pentru lucru):
<?php
$conn = mysql_connect( "localhost", "Marius", "mypass")
or die("Unable to connect to MySQL");
mysql_select_db("lucrudb");
if (mysql_error()) {
echo "<br />". mysql_errno(). " : ". mysql_error();
}
?>
Daca se reuseste conexiunea la serverul MySQL si baza de date cu numele
"lucrudb" este inexistenta, rezultatul afisat de exemplul de mai sus va fi
urmatorul:
Connected to MySQL
1049 : Unknown database 'lucrudb'
Numeroase functii PHP pot produce erori sau mesaje de avertizare care i pot
deruta pe utilizatorii siturilor Web sau le pot cauza neplaceri.
PHP furnizeaza functia error_reporting(), care va permite sa eliminari
mesajele nedorite. Functia are urmatoarea forma:
error_reporting(mask)
unde "mask" specifica tipul mesajelor care vor fi raportate. Daca specificati zero
ca valoare a atributului "mask" (error_reporting(0)), nu va fi raportat nici un
mesaj. Daca specificati "E_ALL" in loc de "mask" (error_reporting(E_ALL)), vor
fi raportate toate mesajele.
Pentru a crea o noua baza de date folosim comanda SQL "CREATE DATABASE
numeBazaDeDate;", pe care o putem lansa de la o consola MySQL, sau o
putem apela de la un script PHP prin intermediul functiei mysql_query(). Iata
un exemplu prin care creem baza de date "lucrudb":
<?php
$conn = mysql_connect( "localhost", "Marius", "mypass")
or die("Unable to connect to MySQL");
$createdb = mysql_query("CREATE DATABASE lucrudb");
if ($createdb)
echo "Baza de date lucrudb a fost creata <br />";
else
echo "<br />". mysql_errno(). " : ". mysql_error();
mysql_close();
?>
- Dupa executarea acestui script, daca totul este corect, va fi creata baza de
date "lucrudb" si va fi afisat mesajul "Baza de date lucrudb a fost creata".
Dupa ce programul a obtinut o conexiune cu serverul MySQL, inainte de a lucra
cu tabelele dintr-o baza de date MySQL, programul trebuie sa selecteze baza de
date respectiva. Pentru aceasta, folositi functia mysql_select_db(), care are
urmatoarea forma:
mysql_select_db(baza_de_date)
5. Crearea tabelelor
Dupa conectare si selectarea bazei de date putem crea tabele in cadrul bazei de
date selectate. Pentru aceasta folosim limbajul SQL CREATE TABLE
numeTabel (coloana1, coloana2, ...); impreuna cu functia mysql_query().
In exemplul urmator cream tabelul cu numele "carti" care contine urmatoarele
campuri:
Dupa ce aveti tabelul creat in baza de date MySQL puteti adauga date in el,
pentru aceasta se foloseste functia mysql_query("interogare") unde
"interogare" este urmatoarea comanda:
INSERT INTO `nume_tabel` (coloana1, coloana2, ...) VALUES
('date1', 'date2', ...)
- unde `nume_tabel` este numele tabelului in care se adauga datele
- "coloana1, coloana2, ..." sunt numele coloanelor in care se doreste adaugarea
datelor
- "date1, date2, ..." sunt datele care vor fi adaugate, tinandu-se cont de ordinea
si numarul lor cu cea a coloanelor
Iata un exemplu, in care se foloseste tabelul "carti" creat mai sus
<?php
$conn = mysql_connect("localhost", "Marius", "mypass")
or die("Unable to connect to MySQL");
$selectdb = mysql_select_db('lucrudb');
if (!$selectdb)
echo "Baza de date lucrudb nu a putut fi selectata deoarece : ".
mysql_errno(). " : ". mysql_error();
$sql = "INSERT INTO `carti` (nume, autor, gen, data_intrare, pret) VALUES
('Glossa', 'Mihai Eminescu', 'poezie', '19-05-2009', '8')";
if (mysql_query($sql, $conn))
echo 'Datele au fost adaugate';
else
echo "Datele nu au fost adaugate deoarece : ". mysql_errno(). " : ".
mysql_error();
mysql_close();
?>
- In acest exemplu, datele "'Glossa', 'Mihai Eminescu', 'poezie', '19-05-2009', '8'"
vor fi adaugate in coloanele "nume, autor, gen, data_intrare, pret" in aceeasi
ordine in care sunt scrise si datele si coloanele.
- Daca au fost adaugate cu succes, apare mesajul "Datele au fost adaugate", in
caz contrar apare mesajul de eroare.
Daca doriti sa adaugati mai multe linii in tabel, printr-o singura interogare,
puteti folosi urmatorul model
<?php
// Aici adaugati comenzile pt. conectare si selectarea bazei de date
Din punctul de vedere al limbajului PHP, exista doua categorii de interogari SQL,
ambele fiind emise folosind functia mysql_query().
Pentru a verifica daca o interogare UPDATE, INSERT sau DELETE a avut efectul
dorit, puteti folosi functia mysql_affected_rows(), care returneaza numarul
rndurilor afectate de interogarea cea mai recenta.
O alta functie utila este mysql_insert_id().
Cand introduceti un rand intr-un tabel a carui cheie primara este de tipul
AUTO_INCREMENT, functia mysql_insert_id() determina valoarea cheii primare
atribuite de MySQL. Functia returneaza valoarea zero daca interogarea
precedenta nu a generat o valoare AUTO_INCREMENT. Ca atare, functia trebuie
apelata la putin timp dupa interogarea care a inserat rndul in tabel, astfel nct
o alta interogare ulterioara sa nu modifice rezultatul.
Iata un exemplu de utilizare a functiilor mysql_affected_rows() si
mysql_insert_id() impreuna cu iterogarea INSERT (care adauga randuri in
tabel). Folosim baza de date "lucrudb" si tabelul "carti", create in Utilizare baze
de date cu PHP.
<?php
$conn = mysql_connect("localhost", "Marius", "mypass")
or die("Unable to connect to MySQL");
$selectdb = mysql_select_db('lucrudb');
if (!$selectdb)
<?php
$sql = "INSERT INTO `carti` (nume, autor, gen, data_intrare, pret) VALUE
('Carte3', 'Autor3', 'Gen3', '2008-9-16', 8.30)";
$insert = mysql_query($sql);
if (!$insert) {
echo "<br /> Cmanda INSERT a esuat: ". mysql_errno(). " : ". mysql_error().
"<br />";
o mysql_fetch_row().
- adauga datele intr-o matrice asociativa unde pentru fiecare
element avem chei cu numere consecutive (incepand de la 0) care
reprezinta ordinea coloanelor iar valoarile lor sunt datele din randul
respectiv
o mysql_fetch_object().
- aduce rezultatele randului sub forma de obiect cu perechile
$rand->coloana
Ca sa intelegeti mai bine, voi arata cate un exemplu cu fiecare in parte (voi
folosi acelasi tabel, "carti"). Studiati-le cu atentie si exersati-le singuri.
Nu s-au mai introdus in aceste exemple instructiunile pentru conectarea la
serverul MySQL si pentru selectarea bazei de date, le adaugati dumneavoastra.
De exemplu, daca doriti sa aflati toate datele din anumite coloane puteti folosi
functia mysql_fetch_assoc() astfel:
<?php
$interogare = "SELECT `nume`, `autor` FROM `carti`";
$rezultat = mysql_query($interogare);
if (mysql_errno()) {
echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";
}
if (mysql_num_rows($rezultat) == 0) {
echo '0 rezultate';
}
else {
while ($rand = mysql_fetch_assoc($rezultat)) {
echo '<br />'. $rand['nume']. ' - '. $rand['autor'];
}
}
?>
- Variabila "$rand" devine o matrice ale carei chei sunt numele coloanelor iar
valorile lor sunt datele coloanelor respective din randul curent; instructiunea
- Comform datelor adaugate in tabelul "carti", aceste doua exemple vor afisa
urmatorul rezultat
Glossa - Mihai Eminescu
Carte2 - Autor2
Carte3 - Autor3
Daca doriti sa afisati toate datele din fiecare coloana de pe fiecare rand al
tabelului, puteti folosi functia mysql_fetch_row() astfel:
<?php
$interogare = "SELECT * FROM `carti`";
$rezultat = mysql_query($interogare);
if (mysql_errno()) {
echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";
}
if (mysql_num_rows($rezultat) == 0) {
echo '0 rezultate';
}
else {
while ($rand = mysql_fetch_row($rezultat)) {
foreach ($rand as $coloana) {
echo "| $coloana |";
}
echo "<br />";
mysql_num_fields()
Pentru a obtine numele unei coloane dintr-un tabel MySQL, folositi functia
mysql_field_name()
Aceasta returneaza numele coloanei din setul de rezultate. Functia preia doua
argumente: valoarea returnata de functia mysql_query() si indexul coloanei
care va fi descrisa. Indexul asociat cu prima coloana este 0, indexul asociat celei
de-a doua coloane este l etc.
Iata un exemplu care determina numele primei coloane dintr-un tabel MySQL:
Pentru a obtine lungimea unei coloane dintr-un tabel MySQL, folositi functia
mysql_field_len()
Pentru a obtine indicatorii SQL asociati unei coloane dintr-un tabel MySQL,
folositi functia
mysql_field_flags()
AUTO_INCREMENT
BINARY
BLOB
MULTIPLE_KEY
NOT_NULL
PRIMARY_KEY
TIMESTAMP
UNIQUE_KEY
UNSIGNED
ZEROFILL
- Daca la o coloana sunt asociati mai multi indicatori, fiecare indicator este
separat de vecinii sai prin intermediul unui singur spatiu.
Iata un exemplu care determina indicatorii asociati primei coloane dintr-un tabel
MySQL:
<?php
$sql = "SELECT * FROM `nume_tabel`";
$rezultat = mysql_query($sql);
if (mysql_errno()) {
echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";
}
$indicatori = mysql_field_flags($rezultat, 0);
echo "<br /> Indicatorii Coloanei 1 : $indicatori";
mysql_close();
?>
Pentru a obtine tipul MySQL al unei coloane dintr-un tabel MySQL, folositi functia
mysql_field_type()
Pentru a determina tabelul MySQL (daca exista) asociat unei anumite coloane,
folositi functia
mysql_field_table()
Daca doriti obtinerea mai multor caracteristici ale setului de rezultate, o functie
utila poate fi:
mysql_fetch_field()
mysql_data_seek(rezultat, numar_rand)
Tutoriale PHP
- Aceste tutoriale sunt o completare la lectiile cursului PHP-MySQL.
Daca sunteti incepatori in cunoasterea programarii si limbajului PHP si doriti sa-l
invatati, recomand sa studiati mai intai lectiile din curs, astfel veti intelege mai
bine exemplele si explicatiile din tutoriale.
5. Numere aleatoare
28. Sterge / Obtine valori duplicate din Array - Resetare chei in PHP
Tutoriale .htaccess
Introducere .htaccess
Mod-Rewrite
Erori de site-uri
Protectii cu Parole
Blocari accesari
<?php
if(!isset($_SESSION)) session_start();
</body>
</html>
<?php
if(!isset($_SESSION)) session_start();
Urmatoarea functie poate fi utilizata pentru un CAPTCHA cu cel mai mic numar.
Returneaza un array cu 4 numere unice, alese aleator intre 1 si 100, raspunsul (cel mai
mic numar) e retinut in $_SESSION.
// creaza SESSION cu cel mai mic numar din 4 numere. Primeste numele sesiunii
// returneaza un array cu cele 4 numere
// De la: // http://www.site-ul-tau.net/php-mysql/
function setCaptcha2($ses_name) {
// creaza un array cu numere de la 1 la 100
$nrs = range(1, 100);
// daca sesiunea exista o sterge, seteaza sesiunea cu cel mai mic numar
if(isset($_SESSION[$ses_name])) { unset($_SESSION[$ses_name]); }
$_SESSION[$ses_name] = min($nrs);
Acest tutorial arata cum se preia in PHP datele dintr-un sir cu obiect
JSON, folosind json_decode().
Obiectul (sirul JSON) poate fi preluat dintr-o sursa externa. De exemplu, de la o
adresa URL (cu file_get_contents(), sau cURL) care returneaza un sir cu date in
obiect JSON, sau dintr-un fisier text de pe server, sau dintr-o baza de date.
Este important ca sirul sa fie un obiect JSON valid, altfel, functia json_decode()
va returna False sau Null.
Daca vreti sa transformati sirul cu obiect JSON intr-un Array asociativ in PHP,
adaugati True ca al doilea argument in json_decode().
Sintaxa:
$arr = json_decode($sir_json, true);
Exemplu:
<?php
// sir cu obiect JSON
$strjson = '{"url": "http://site-ul-tau.net/", "category": "Diverse", "nr_pages": 1500}';
// Test
var_dump($arrjson);
Web Development
JavaScript
/*
Se poate prelua acest sir de la pagina Youtube Api folosind acest cod:
$url = 'http://www.youtube-mp3.org/api/itemInfo/?
video_id=6UjfTKHQ4vo&adloc=&r={{datetime}}';
$yinfo = file_get_contents($url);
*/
$x = 7;
foo($x);
echo $x; // 9
?>
.Dupa cum observati, atribuirea prin referinta poate crea situatii /efecte destul
de complexe, de aceea este indicat a se evita folosirea ei, mai ales la incepatori.
Daca aveti un array cu numerr si vreti sa obtineti un numar aleator din acel
array, se poate aplica functia array_rand(). Aceasta functie returneaza cheia
unui element din array ales aleator.
- Exemplu:
$nrs = array(123, 567, 4556, 34245, 78);
$rk = array_rand($nrs);
$nr = $nrs[$rk];
echo $nr; // 4556
Daca vreti sa alegeti mai mult de o cheie din array, adaugati un al doilea
argument, care reprezinta numarul de chei (mai mic decat numarul de elemente
din acel array). In acest caz, array_rand($array, $nrk) va returna un array cu
$nrs numere de chei aleatoare din $array.
$nrs = array(123, 567, 4556, 34425, 78, 789);
$rks = array_rand($nrs, 2); // contine 2 chei aleatoare (2, 5)
Daca vreti sa obtineti un numar aleator dintre un minim si maxim, dar cu cifre
distincte, fara ca vreo cifra sa se repete in numarul ales aleator, puteti folosi
urmatoarea functie.
<?php
// returneaza un numar aleator intre $min si $max, cu cifre distincte
function getDistinctNr($min, $max) {
// obtine numar aleator cu cifre diferite ( www.coursesweb.net )
$nrstr = (string) mt_rand($min, $max); // numar aleator transformat in sir
$n_nr = strlen($nrstr); // numarul de caractere
$setnr = array(); // va retine cifrele ce formeaza numarul aleator returnat
// Test
$nr = getDistinctNr(1000, 9999);
echo $nr;
?>
<header id="header">
<h1><!-- TITLE --></h1>
</header>
<section id="article">
<!-- ARTICLE -->
</section>
<section id="sidemenu">
<nav><!-- SIDEMENU --></nav>
</section>
<footer id="footer">
<!-- FOOTER -->
</footer>
</body>
</html>
// setare /definire date in elementele din $templ, care vor inlocui comentariu corespunzator in
template
// aceste date pot fi preluate dintr-o baza de date, fisier extern, array, etc.
$templ['TITLE'] = 'Cursuri gratuite: www.site-ul-tau.net';
$templ['META_DESCRIPTION'] = 'Descriere adaugata in meta tag';
$templ['META_KEYWORDS'] = 'Cuvinte, importante, din pagina';
$templ['ARTICLE'] = 'Articol, continut adaugat in corpul paginii';
$templ['SIDEMENU'] = 'Meniu: <ul><li><a href="http://www.site-ul-tau.net/" title="Cursuri
gratuite">Cursuri gratuite</a></li></ul>';
$templ['FOOTER'] = 'Continut adaugat in subsolul paginii';
// preia template-ul
$tpl = file_get_contents('page.tpl');
Expresia:
Creaza sablonul RegExp cu, cuvintele folosite in modelul din template ce va fi inlocuit
cu date din PHP, aceste cuvinte sunt cheile adaugate in array-ul $templ. Sunt adaugate
in RegExp separate prin "|" ca sa creeze un sablon ca acesta:
Intr-un tabel MySQL daca dorim sa fie selectate doar acele randuri in care o
colana are o anumita valoare, se adauga in comanda SQL formula: WHERE
`coloana`='valoare' , dupa cum se vede in urmatorul exemplu.
In acest exemplu vor fi selectate doar randurile din coloanele "col1" si "col2"
unde "col1" are o anumita valoare fixa precizata.
<?php
// conecteaza la baza de date
$conn = new mysqli('localhost', 'root', 'pass', 'baza_date');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
$conn->close();
?>
- "col1" si "col2" sunt coloanele din "tabel" care vrem sa fie selectate. Puteti
adauga mai multe nume (separate prin virgula), sau pentru a selecta toate
coloanele, se foloseste caracterul *
Pe langa formula "WERE" pot fi folosite si comenzile AND (si) sau OR (sau),
pentru a efectua selecturi mai complexe, sau mai precise, cautand randurile in
functie de valorile mai multor coloane.
- De exemplu, daca se doreste selectarea doar a randurilor in care avem "col1"
cu valoarea "val1" si "col2" cu valoarea "val2"; randul selectat sa indeplineasca
ambele conditii, se foloseste comanda SQL cu AND astfel:
$sql = "SELECT `col1`, `col2` FROM `tabel` WHERE `col1`='$val1' AND
`col2`='$val2'";
O alta selectare necesara este atunci cand se doreste cautarea randurilor care
au in datele din coloana un anumit termen sau cuvant. Pentru aceasta se
folosesc impreuna comenzile WHERE si LIKE.
Se adauga la comanda SQL formula: WHERE `coloana` LIKE 'termen'
De exemplu:
$sql = "SELECT `col1`, `col2` FROM `tabel` WHERE `col1` LIKE '$term'";
- Valoarea lui '$term' poate fi un cuvant sau fraza exacta, ori o parte dintr-un
cuvant, in acest caz se foloseste si caracterul "%", astfel, pot fi obtinute
urmatoarele 4 cazuri:
De obicei, termenul cautat este preluat dintr-un formular. Trebuie sa tineti cont
de modul in care au fost adaugate datele in tabelul MySQL, daca au fost filtrate
cu o functie, precum "mysql_real_escape_string()", cand se face selectul pentru
cautare trebuie aplicata aceeasi functie termenului cautat.
- Mai jos puteti studia si folosi codul unui model de script, cu formular, pentru
selectarea dintr-un tabel MySQL a randurilor in care se gaseste termenul
transmis prin formular. Explicatiile detaliate sunt in codul scriptului.
<!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" lang="ro">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Script cautare MySQL</title>
<meta name="description" content="Script cu formular pt cautare in tabel MySQL. Tutorial de
la http://www.site-ul-tau.net" />
<meta name="keywords" content="script cautare" />
</head>
<body>
<?php
// Script - Tutorial de la http://www.site-ul-tau.net
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
$conn->close();
}
?>
</body>
</html>
Ca sa obtineti numarul de zile dintre doua date in PHP, puteti folosi acest
model:
<?php
// calculeaza numar de zile dintre $enddate si $startdate
$startdate = '2012-04-3';
$enddate = '2012-05-18'; // pt data curenta: date('Y-m-d');
$days = (strtotime($enddate) - strtotime($startdate)) / (60 * 60 * 24);
Daca vreti sa calculati numarul de zile dintre o anumita data si ziua curenta,
folositi: $enddate = date('Y-m-d');
- Pentru a selecta inregistrarile dintre doua date intr-o baza de date MySQL,
puteti folosi acest model:
SELECT * FROM `table` WHERE `date` BETWEEN '2012-04-03' AND '2012-05-18'
- Pentru a selecta randurile dintre o anumita data si ziua curenta, folositi acest
exemplu:
SELECT * FROM `table` WHERE `date` BETWEEN '2012-04-03' AND CURRENT_DATE
// daca $setday e 7 sau mai mare, scade 7 zile si mareste $setweek cu o saptamana
if($setday >= 7) {
$setday -= 7;
$setweek = $week_nr + 1;
}
return $re;
}
// daca $setday e 7 sau mai mare, scade 7 zile si mareste $setweek cu o saptamana
if($setday >= 7) {
$setday -= 7;
$setweek = $week_nr + 1;
}
return $re;
}
// obtine zilele din saptamana precedenta (de Luni pana Duminica inclusiv)
$days = daysWeek($week_nr, $year);
// Test
var_export($days);
?>
- Pentru a selecta inregistrarile dintr-o anumita saptamana din an, dintr-o baza
de date MySQL, puteti folosi acest exemplu:
SELECT * FROM `table` WHERE YEAR(`date`) = 2012 WEEK(`date`) = 40
mysql_list_dbs()
Pentru a obtine o lista a tabelelor incluse ntr-o baza de date specificata, folositi
functia
mysql_list_tables()
Pentru a putea obtine lista cu tabelele dintr-o baza de date, trebuie ca numele
de utilizator si parola folosite sa ofere acces la baza de ate respectiva, in caz
contrar veti primi un mesaj de eroare.
Pentru a obtine o lista a coloanelor incluse ntr-un tabel, puteti utiliza functia:
mysql_list_fields()
Daca in locul numelui coloanelor doriti sa obtineti alte informatii despre colanele
dintr-un tabel MySQL, folositi in locul functiei mysql_field_name() din interiorul
instructiunii "for", una din functiile: mysql_fetch_fields(), mysql_field_flags(),
mysql_field_len() sau mysql_field_type(), care au fost prezentate in primul
capitol al aceastei lectii.
Cand doriti sa adaugati date intr-un tabel MySQL (cu INSERT sau UPDATE) care
sunt primite de exemplu dintr-un formular HTML sau prin adresa URL, pe care le
preluati prin "$_POST" sau "$_GET", inainte de a le adauga in baza de date este
indicat sa le "prelucrati", sa va asigurati ca nu vor fi introduse date care pot fi
1. Exemplu cu addslashes()
<?php
// Intai faceti conectarea la MySQL si selectarea bazei de date
2. Exemplu cu mysql_real_escape_string()
- Pentru a avea exemple variate, aici folosim o interogare pentru UPDATE
<?php
// Intai faceti conectarea la MySQL si selectarea bazei de date
3. Exemplu cu htmlentities()
- Cand doriti sa adaugati cod HTML intr-un tabel MySQL, pentru siguranta
puteti folosi "htmlentities()".
<?php
// Intai faceti conectarea la MySQL si selectarea bazei de date
// Variabila care contine codul HTML pe care dorim sa-l adaugam in tabelul
MySQL
$sir = '<a href="http://www.site-ul-tau.net/php-mysql" title="Curs
PHP-MySQL">PHP-MySQL</a>';
- Pentru a citi si returna corect datele care a fost adaugate in tabelul MySQL
folosind "htmlentities()", aplicati functia inversa acesteia,
html_entity_decode().
Iata un exemplu:
<?php
// Intai faceti conectarea la MySQL si selectarea bazei de date
Procedeul este simplu, se aplica functia "mail()", dupa cum e explicat in prima
parte (Lectia 31), folosind sintaxa:
mail($to, $subiect, $mesaj, $from)
Pentru ca tag-urile HTML sa fie recunoscute si afisate corespunsator, trebuie
adaugate header-ele specifice in corpul datelor ce contin adresa "From:" (din
variabila $from). Aceste headere trebuie sa spuna receptorului sa recunoasca
datele trimise ca fiind de tip text/html, si in general puteti folosi pe urmatoarele
doua, impreuna:
"MIME-Version: 1.0"
"Content-type: text/html; charset=iso-8859-1"
<?php
// De la www.site-ul-tau.net
- Daca doriti sa formatati textul folosind cod CSS, acesta trebuie adaugat prin
atributul style="". Nu functioneaza cu tag <style>.
- Pentru aranjamente speciale este indicat sa utilizati tabele si coloane HTML
Pentru a include unul sau mai multe atasamente (fisiere, arhive) intr-un e-mail
trimis cu PHP, procedeul e ceva mai complicat. Pe scurt, trebuie ca datele din
acel fisier sa fie preluate (citite) de PHP, codate cu MIME base64 si impartite cu
functia "chunk_split()". Apoi aceste date, impreuna cu tipul fisierului atasat, se
adauga in corpul mesajului, alaturi de celelalte headere.
Puteti intelege cum se face daca studiati script-ul de mai jos, de asemenea, il
puteti folosi in aplicatiile dv.. Este facut ca model pentru a trimite doua
atasamente, poate fi modificat usor daca doriti sa trimiteti doar unul sau mai
multe, gasiti explicatii in documentatia din script.
Important este sa specificati calea corecta catre fisierul atasat, astfel incat
acesta sa poata fi deschis cu functia "fopen()", in cazul acestui model, cele doua
fisiere se afla in acelasi director cu scriptul. Pentru fisiere de tip arhiva .rar si .zip
nu e nevoie sa modificati tipul.
Vedeti detaliile din cod despre cum se adauga fisierele pt. atasament.
<?php
// Script PHP - Trimitere e-mail cu attasamente si tag-uri HTML
// De la www.site-ul-tau.net ( adaptat de la: http://www.codewalkers.com/c/b/Email-Code/ )
$rand_hash = md5(time());
$mime_boundary = "==Multipart_Boundary_x".$rand_hash."x";
- Cu functia din acest script pot fi trimise si e-mail-uri fara atasament, doar cu
continut text si cod HTML in mesaj, pt. asta trebuie sterse variabilele de tip
Exemplu cu WHILE
<?php
// Matricea cu datele ce vor fi afisate in tabel
$aray = array('val1', 'val2', 'val3', '... val_n');
// Se elimina posibil rand gol adaugat, pt. care nu au mai fost elemente pt. coloane
(<tr></tr>)
$tabel_html = str_replace('<tr></tr>', '', $tabel_html);
}
Exemplu cu FOR
<?php
// Matricea cu datele ce vor fi afisate in tabel
$aray = array('val1', 'val2', 'val3', '... val_n');
// Se elimina posibil rand gol adaugat, pt. care nu au mai fost elemente pt. coloane
(<tr></tr>)
$tabel_html = str_replace('<tr></tr>', '', $tabel_html);
}
- La fel se procedeaza cu WHILE si FOR pentru date ce sunt preluate din alta sursa (nu
doar Array), cum ar fi randuri dintr-un fisier.
Exemplu cu FOREACH
<?php
// Matricea cu datele ce vor fi afisate in tabel
$aray = array('a'=>'val1', 'b'=>'val2', 3=>'val3', 'z'=>'... val_n');
// Se elimina posibil rand gol adaugat, pt. care nu au mai fost elemente pt. coloane
(<tr></tr>)
$tabel_html = str_replace('<tr></tr>', '', $tabel_html);
}
val
val2
1
val ...
3 val_n
- In general, cel mai des folosit caz este acela cand sunt selectate mai multe
randuri dintr-un tabel MySQL si se doreste afisarea lor intr-un tabel HTML.
Mai jos este un exemplu general simplu pentru afisarea datelor din MySQL sub
forma de tabel.
Pentru lucrul cu MySQL vedeti lectiile mai avansate, de la nr. 22-27, apoi
reveniti la acest tutorial.
<?php
// Variabila in care va fi stocat codul pt. tabelul HTML
$tabel_html = '';
// Se scrie in bucla WHILE codul HTML pt. adaugarea DOAR a randurilor ce vor fi in
tabel
while($rand = mysql_fetch_array($rezultat)) {
$tabel_html .= '<tr><td>' .$rand['col1']. '</td><td>' .$rand['col2']. '</td></tr>';
}
In aceast tutorial este prezentat si explicat modul de creare a unui site simplu,
de la zero, folosind PHP, si fara a utiliza baza de date.
Datele despre paginile site-ului sunt stocate intr-o matrice iar continutul
acestora, doar ce se schimba de la o pagina la alta, se va afla in fisiere.
Obiectul acestui tutorial este codul PHP si logica acestuia pentru crearea unui
site simplu de prezentare, designul HTML, CSS nu este finalizat pentru aspect
grafic.
Ca sa intelegeti si sa aplicati tutorialul din aceasta lectie, trebuie sa aveti
cunostinte generale despre HTML, CSS si PHP.
1. Structura site-ului
Site-ul va contine:
- Dupa scriptul PHP este adaugat codul HTML: sectiunea HEAD cu meta-tag-urile
si in BODY template-ul (sau layout-ul) site-ului.
- Template-ul este format din trei zone principale: top, corp si subsol. Corpul
este impartit in doua zone: meniu (pozitionat in stanga) si context. In afara de
ce apare in context, tot restul codului HTML este creat si generat in "index.php"
si va apare in toate paginile.
- Fisierul admin.php
<?php
// Datele initiale pt. HEAD ale pagini "index"
$titlu = 'Titlul paginii index';
$desc = 'Descrierea pentru pagina index';
$keys = 'cuvnte, cheie, pagina, index';
/*** Matricea cu datele despre paginile adaugate in site, care apar in "context" ***/
$pags['despre_mine'] = array(
'titl'=>'Titlul paginii Despre Mine',
'desc'=>'Descrierea paginii Despre Mine',
'keys'=>'cuvinte, cheie, despre, mine'
);
$pags['favorite'] = array(
'titl'=>'Titlul paginii Favorite',
'desc'=>'Descrierea paginii Favorite',
'keys'=>'cuvinte, cheie, favorite'
);
$pags['poze'] = array(
'familie'=>array(
'titl'=>'Titlul pt. pagina Poze Familie',
'desc'=>'Descriere pt. pagina Poze Familie',
'keys'=>'cuvinte, cheie, poze, familie'
),
'prieteni'=>array(
'titl'=>'Titlul pt. pagina Poze Prieteni',
'desc'=>'Descriere pt. pagina Poze Prieteni',
'keys'=>'cuvinte, cheie, poze, prieteni'
),
'natura'=>array(
'titl'=>'Titlul pt. pagina Poze Natura',
'desc'=>'Descriere pt. pagina Poze Natura',
'keys'=>'cuvinte, cheie, poze, natura'
)
);
// Daca doriti sa adaugati alte meniuri sau submeniuri pt. alte pagini de site
// Adaugati in continuare, comform modelului de mai sus
// De asemenea, trebuie sa adaugati in dir. "pagini" fisierul ce contine contextul afisat de acel
meniu
?>
- Fisierul index.php
<?php
// Exemplu creare site cu PHP, de la http://www.site-ul-tau.net
ini_set('display_errors',1);
error_reporting(E_ALL);
/*** Crearea variabilei ce contine codul HTML pt. meniu, cu paginile din matrice ***/
// Verifica daca sunt primite date prin GET si daca acestea se afla in matrice
// Creaza variabilele pt. meta-tags si continutul ce va fi inclus
if (isset($_GET['id']) && isset($pags[urldecode(trim($_GET['id']))])) {
</body>
</html>
- Fisierul grafic.css
body {
margin:0px auto;
width:1000px;
background-color:#e8e8fe;
text-align:center;
}
Important
- Numele fisierelor pe care le adaugati in directorul "pagini" (pt. continut din context)
trebuie sa fie acelasi cu numele cheii din elementul matricei "$pags[]" pentru pagina
3. Cosmetizarea link-urilor
Options +FollowSymLinks
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z_]+).html$ index.php?id=$1 [NC,L]
RewriteRule ^([a-zA-Z_]+)-([a-zA-Z_]+).html$ index.php?id=$1&sm=$2 [NC,L]
In script-ul PHP din "index.php", unde este generat codul pentru meniu, trebuie
efectuate urmatoarele doua modificari:
In loc de
Scrieti
Cu