Invata PHP cu punctsivirgula.ro

I. Introducere
II. Notiuni de baza
III. Notiuni avansate
IV. Aplicatii
V. Extra
C O N T I N U T
Notiuni de baza

Taguri PHP, instructiuni, punct si virgula    0 ! 

Codul PHP trebuie inclus in fisiere cu extensia .php ce vor fi deservite utilizatorilor finali si trebuie delimitat de restul continutului prin tagul de inceput <?php si tagul de sfarsit ?>. Practic tot ce se afla in interiorul acestor etichete va fi interpretat ca fiind cod-sursa PHP (cod ce va fi executat de interpretorul PHP). Textul din afara celor 2 taguri este lasat neschimbat, fiind ulterior interpretat de browser. Se pot folosi si alte etichete in functie de configuratia serverului web, dar acestea nu sunt recomandate.

<?php
/* forma recomandata */
?>
 
<script language="php">
/* forma disponibila oricand, putin folosita */
</script>
 
<?
/* taguri scurte, acceptarea lor de catre web-server depinde de configurare */
?>
 
<%
/* taguri in stilul asp, acceptarea lor de catre web-server depinde de configurare */
%>
Codul PHP este format din instructiuni - comenzi date catre interpretor, in urma carora se executa ceva. Asa cum s-a mai spus, PHP este folosit in principal pentru a genera cod HTML, asa ca de cele mai multe ori instructiunile folosite sunt cele de afisare. In aplicatii mai complexe se pot insa folosi si instructiuni de conectare la bazele de date, de citire/scriere/manipulare fisiere, intructiuni de trimitere email-uri si altele. Instructiunile se pot grupa in blocuri delimitate de acolade { }. Aceste blocuri, numite si "instructiuni complexe" se comporta ca si cum ar fi o singura instructiune (vezi mai jos exemple de blocuri).

Toate instructiunile (in afara de blocuri) trebuie sa fie terminate cu punct si virgula ( ; ). Lipsa acestuia genereaza o eroare.

Nimic de afisat.


Adauga un comentariu la aceasta sectiune.

 


Afisarea textului in PHP    11 ! 

In multe din scripturile scrise de incepatori (si nu numai) continutul rezultat in urma executiei este un text (de obicei in format HTML). Pentru a obtine acest text, secventele de cod trebuie sa contina instructiuni explicite care sa "spuna" intrepretorului ce anume trebuie afisat.

Instructiunile de afisare sunt print, echo si printf. Primele doua sunt echivalente si fac acelasi lucru (exista unele diferente de forma, vezi exemplul de mai jos, dar poate fi folosita oricare dintre ele); printf este folosita mai rar datorita sintaxei oarecum greoaie.

<?php
# cele 2 instructiuni de mai jos sunt echivalente
print "Text";
echo "Text";
 
# o singura instructiune echo poate primi mai multi parametri, separati prin virgula
echo "<br />", "Afisez", " un text din ", 4, " bucati";
 
# o singura intstructiune print poate primi doar unul
print "<br />";
print "Afisez";
print " un text din ";
print 4;
print  " bucati";
 
# printf este folosita pentru a formata continutul, la fel ca in C/C++
printf( "<br />Am %4.2f lei", 102.123456 ); // afiseaza Am 102.12 lei
?>
Adi a spus Print in bloc - 04.02.2010

<?php
echo "Este 3 mai mic decat 2? <br />";
if( 3 < 2 ) {
print "3 < 2";
print "3 este mai mic decat 2";
}
?>

este un exemplu unde ar trebui sa se vada cum indiferent de instructiune daca lipsesc {} tot ce urmeaza dupa prima instructiune este executat indiferent de conditie.
Cred ca trebuiesc sterse {} ca sa se afiseze ce ai spus ca va afisa

P.S. E foarte util site`ul chiar sunt incepator si chiar se explica totul pe intelesul incepatorilor. Felicitari

cristina a spus te rog - 21.08.2010

eu am facut C++dar nu stiu la ce se foloseste instr <br/>..ma poti ajuta?
"/n"-este folosit pentru a afisa pe un rand diferit..sau pentru ce..ca nu mai tin minte

dorutzu a spus raspuns - 10.09.2010

pt cristina, in C++ nu exista <br/>, iar "/n" e folosit pt linie noua

geo a spus pentru cristina - 28.12.2011

stiu,e o diferenta foarte mare de timp intre intrebarea cristinei si raspunsul meu,dar poate le va fi de ajutor altora

tagul <br> semnifica linie noua in html

ionut a spus restart apache - 03.11.2013

dupa modificarile de rigoare in notepad, salvez, reload pagina si nu incarca pana nu dau restart apache.
Aveti vreo solutie?

Alexandru a spus Pentru ionut - 04.11.2013

Ionut, probabil ai activat Alternative PHP Cache (APC) si este configurat in asa fel incat script-urile PHP nu sunt verificate daca au fost modificate. Prin urmare, cache-ul de la nivelul apache-ului nu este actualizat decat la restart. O solutie ar fi sa activezi verificarea scripturilor (configurarea apc.stat activata) sau eventual sa dezactivezi APC complet. Detalii aici: http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat

ed62 a spus Teste Ideone - 30.04.2014

Buna si multumesc pentru lectii - foarte utile.
O problema ar fi testarea pe Ideone - tagurile <br /> sunt considerate text, nu instructiuni html.

De exemplu pentru codul de la
Afisarea textului in PHP
apare ca rezultat
TextText<br />Afisez un text din 4 bucati<br />Afisez un text din 4 bucati<br />Am 102.12 lei


Alexandru a spus Pentru ed62 - 30.04.2014

Salut,

Ma bucur ca iti este util site-ul.

Legat de IdeOne, mie mi se pare corect modul de afisare. Practic iti arata exact ceea ce returneaza scriptul PHP (text cu taguri), ceea ce poate fi util in anumite situatii, in special in perioada deprinderii cu programarea in PHP.

La urma urmei, PHP afiseaza un text. Faptul ca il vizualizezi cu un browser (si ca apare diferit de cum l-ai vedea cu Notepad) nu are legatura stricta cu procesarea server-side.

Un alt avantaj, zic eu, este ca te "forteaza" sa incerci exemplele pe calculatorul personal daca vrei sa vezi rezultatele altfel. Lucru bun, pentru ca te face sa scrii cod, nu doar sa citesti cod :)

Succes!
Alexandru

Domnul p a spus Nelamurire - 16.08.2014

Pentru "printf" avem:
"%4.2f", ".2"-ul ala spune cate zecimale se iau. 4 la ce se refera?

Alexandru a spus Pentru Domnul p - 19.08.2014

"%4.2f"
Intr-adevar ".2" se refera la nr. de zecimale din rezultatul afisat, iar "4" inseamna lungimea minima a numarului afisat (numarul de caractere).
Altfel spus, "%4.2f" exprima un numar cu cel putin 4 cifre din care 2 zecimale.

Manuel a spus prinf - 22.10.2014

O intrebare nu inteleg la printf "%4.2f" 4 e numarul total de caractere si 2 e numarul de zecimale? daca punem "%2.1f" mie imi afiseaza acelasi lucru...?


Adauga un comentariu la aceasta sectiune.

 


Ce afiseaza PHP?    6 ! 

Rezultatul unui script PHP este de cele mai multe ori un text simplu in format HTML. Cu alte cuvinte, in majoritatea cazurilor PHP returneaza o pagina HTML ce va fi afisata in browser. La inceput, acest lucru poate genera confuzii, intrucat sursa HTML este diferita de ceea ce se afiseaza efectiv in browser.

Spre exemplu, fie urmatoarea secventa de cod:

<?php
print "Salut";
print "Acesta este un script simplu";
?>
Probabil v-ati astepta ca rezultatul sa fie un text afisat pe 2 linii. Salvand aceasta secventa intr-un fisier PHP si accesandu-l prin intermediul unui web-server, veti observa ca rezultatul este urmatorul:
SalutAcesta este un script simplu
Desi este confuz, rezultatul este corect. Codul PHP afiseaza doar caracterele care i-au fost indicate. Sfarsitul de linie reprezinta un caracter separat, ne-printabil, dar care controleaza cum apare textul pe ecran. In cazul nostru, nu s-a transmis acest caracter (numit si new-line) si prin urmare PHP nu l-a afisat.

Sa rescriem exemplul de mai sus pentru a se afisa si caracterul "sfarsit de linie"

<?php
print "Salut";
 
print "\n"; # se afiseaza caracterul "new-line" care determina trecerea la un rand nou
# randul nou va fi afisat in textul trimis catre browser
 
print "Acesta este un script simplu";
?>
Verificand iar in browser veti constata ca nu s-a schimbat nimic. La prima vedere. In realitate rezultatul este afisat pe 2 linii, in textul trimis de PHP catre browser. Intrucat pagina este interpretata ca fiind HTML, browserul ignora caracterele new-line. Pentru verificare vizualizati sursa paginii (meniul View din browser -> view source).

Pentru a ajunge la rezultatul dorit (acela de a afisa un text pe 2 linii in pagina) trebuie folosita urmatoarea secventa:

<?php
print "Salut";
print "\n"; # se afiseaza caracterul "new-line" care determina trecerea la un rand nou
# randul nou va fi afisat in textul primit de browser (vizibil in sursa HTML)
 
print "<br>"; # se afiseaza tagul BR ce va fi interpretat de browser ca 'linie noua'
# linia noua va fi afisata in pagina finala HTML dupa ce este interpretata de 
# browser si nu are nici o legatura cu \n
 
print "Acesta este un script simplu";
?>
Sursa paginii arata in felul urmator:
Salut
<br>Acesta este un script simplu
In browser tagul BR este interpretat ca sfarsit de linie (line break). Caracterul "new-line" afisat de noi (in print "\n") este ignorat oricum in HTML. Rezutatul, asa cum se vede in fereastra browser-ului:
Salut
Acesta este un script simplu

Nota: Este foarte important sa se inteleaga diferenta dintre ceea ce se returneaza in urma executiei unui script PHP si ceea ce se afiseaza propriu-zis in browser. Pe scurt, PHP printeaza cod HTML care este afisat diferit de browsere.

De asemenea, trebuie inteles faptul ca functia print nu afiseaza textul pe mai multe linii daca nu se specifica acest lucru in mod express. Spre exemplu fie urmatoare secventa de cod:

<?php
print "1";
print "2";
print "3";
?>
Rezultatul va fi
123
S-a afisat doar ce s-a indicat, 3 caractere, pe o singura linie, fara spatii.

Un alt lucru important de retinut este faptul ca odata printat, un text nu mai poate fi "sters". Nu exista "undo" pentru un print. Se poate captura intregul continut ce se transmite la finalul executiei, dar nu se poate altera textul afisat de o instructiune print anume.

Intelegand aceste aspecte va va fi mai usor in lucrul cu PHP si in modul in care verificati rezultatele scripturilor voastre.

Stefan a spus Nu merge - 07.08.2013

am creat fisierele, le-am pus in folder dar nu merge, atunci cand dau click pe link imi spune "Oops! This link appears to be broken." .Eu dau click dreapta pe iconul de langa ceas, dau "local web" , dar cand se deschide in browser imi apare scris exact ceea ce este in document, fara nici o schimbare :/

Alexandru a spus Pentru Stefan - 07.08.2013

Ai grija ca fisierul sa fie salvat cu extensia .php si nu .php.txt. Este important. Citeste comentariile de la celelalte sectiuni si o sa afli situatii similare cu a ta. Spor!

Alin a spus in legatura cu spatiul - 18.02.2014

Salut , la mine cand scriu print "\n" imi afiseaza in browser exact asa "\n" dar nu trece scrisul pe alta linie , in schimb cu print "<br>" merge ...

Alexandru a spus Pentru Alin - 18.02.2014

Probabil ca la print scrii expresia \n intre ghilimele simple (apostrof): print '\n'; si nu intre ghilimele duble.

In cazul asta se va printa textul asa cum este, fara ca expresia \n sa fie transformata in linie noua. Mai multe detalii la http://php.punctsivirgula.ro/string/

In alta ordine de idei, elementul <br> este diferit de \n in sensul ca actioneaza asupra modului in care browserul tau afiseaza textul ("rupe" linia, de la <br> = brake). Pe de alta parte expresia new-line ("\n") este cea care introduce o linie noua in textul rezultat in urma executiei. Acel text nu trebuie neaparat sa fie afisat in browser (ar putea de exemplu sa fie scris intr-un fisier, sau pe o conexiune de date).

Important este sa faci diferenta intre <BR> si "\n" si sa stii cand trebuie folosit fiecare.

Spor!

Sergiu a spus spatiul... - 26.02.2014

cand scriu "\n" textul nu se duce jos adica nu face o linie noua ci doar lasa spatiu intre paragrafe de exeplu daca scriu asa print "ceva"
print "\n"
print "altceva"
o sa imi apara: ceva altceva,si nu unul sub altul cum ar trebui.

pavel a spus ajutor - 02.11.2018

sall spune terog cum sa dau variabila de la tastatura in php ca mam uitat da parca nam observat nimic


Adauga un comentariu la aceasta sectiune.

 


Siruri de caractere    16 ! 

In majoritatea scripturilor PHP se lucreaza cu bucati de text denumite siruri de caractere sau string-uri. Sirurile de caractere reprezinta expresii (entitati ce au/returneaza o valoare) si pot fi folosite, la afisare, in atribuiri, la verificari, etc.

In limbajul PHP, sirurile de caractere pot fi delimitate de ghilimele duble, ghilimele simple sau printr-o notatie speciala folosind operatorul <<< (numit heredoc).

<?php
print "Salut, straine! "; // sir simplu, delimitat de ghilimele duble
print 'Salut din nou! '; // sir simplu, delimitat de apostrof
 
// sir delimitat prin notatia speciala heredoc
print <<<SIR
Salut iar!
SIR;
?>

Nota: in acest exemplu nu este nici o diferenta intre modul de definire a sirurilor - toate cele 3 stringuri afisate sunt echivalente, indiferent ca au fost delimitate prin ghilimele, apostrof sau operatorul heredoc. Cu toate astea, PHP trateaza in mod diferit aceste moduri de delimitare. Mai multe explicatii si exemple sunt prezentate in pagina Operatii cu siruri.

Dany a spus Eroare - 23.05.2009

Imi pare o eroare : Parse error: parse error in C:\Program Files\EasyPHP 3.0\www\ma_numesc.php on line 15

Alexandru a spus Eroare in codul de mai sus - 25.05.2009

Da, erau 2 probleme cu secventa de cod de mai sus:
- lipsea punct si virgula (;) la al treilea print
- exista un spatiu dupa "print <<<TXT" ceea ce facea ca interpretorul PHP sa dea eroare.

Problemele au fost corectate acum.

Nota: Pentru a vedea rezultatul scripturilor si a observa diferentele e bine sa te uiti in sursa paginii HTML (View -> View Page Source)

Mihai a spus Iarasi - 23.11.2009

acea eroare a aparut iar:
spatiu dupa "print <<<TXT"
mie nu-mi citeste codul acela pe mai multe randuri si nici cu codul \n nu trece...doar cu <br /> sau <br>

Adi a spus delimitatori - 04.02.2010

Cred ca delimitatorii astia ajuta oarecum la o buna organizare a lucrului programatorului. Sau cel putin asa vad eu pentru moment lucrurile. Nici eu nu intelesesem initial, pana la urma am folosit varianta de mai jos si a mers

<?php
print <<< delimitator
Exemplu de sir care foloseste delimitatorul heredoc.
delimitator;
?>

ALex a spus La fel - 15.07.2010

Si mie imi apare erroare la linia 15 dar am modificat in orice fel si tot asa iese am si dat copy paste de pe site si tot asa :|

Dan a spus heredoc - 27.11.2010

Dragut site, cam rar resurse bune in romana pentru a invata php.Poate ar trebui sa intri mai in detali la tutoriale , sa spui ce e heredoc, ce e nowdoc , la care dintre ele merge interpolare (ce inseamna interpolare) etc.Oricum succes in continuare.

Koobe a spus Solutie - 26.05.2011

problema este ca dupa primul TXT este un spatiu. Eliminarea lui conduce la disparitia erorii.

cristi a spus lamuriri pentru print - 31.01.2012

# o instructiune echo poate primi mai multi parametrii
echo "Afisez", " un text din ", 4, " bucati";

# o singura intstructiune print poate primi doar unul
print "Afisez";
print " un text din ";
print 4;
print " bucati";

si totusi
// concatenarea (legarea) sirurilor
print 'Sir1' . " legat de " . 'Sir2'; // Sir1 legat de Sir2
Ce sa inteleg din astea?

Alexandru a spus Pentru Cristi - 31.01.2012

Prin concatenarea sirurilor se obtine in final un singur sir, care este tratat ca atare, de sine statator.

Asta este important de stiut, pentru ca "print" asa cum ai spus si tu poate primi un singur parametru, iar prin concatenarea mai multor secvente se obtine exact una singura. La executarea instructiunii print interpretorul nu va "sti" ca textul ce trebuie afisat provine din 3 bucati diferite.

La prima vedere e un pic derutant, dar pe masura ce vei parcurge restul capitolelor (Variabile, Functii) va fi mai usor de inteles.

kyo a spus tot pe o linie - 28.05.2012

este enervant ca scrie totul pe o linie impreunat .. dar am rezolvat problema asta:

print <<<TXT
Text pe mai multe linii. <br>
Delimitatorii pot avea orice nume: TXT, START, etc, cu urmatoarele conditii<br>
- ambii delimitatori trebuie sa aiba acelasi nume<br>
- inainte de primul delimitator se foloseste <<<<br>
- delimitatorul de inceput nu trebuie sa fie urmat de spatiu sau alt caracter<br>
- delimitatorul de final sa fie la inceputul liniei (fara spatii inainte)<br>
- dupa delimitatorul final se pune punct si virgula ;<br>
TXT;

Carmen a spus multumesc kyo - 07.05.2015

Multumesc. Foloseam incrementare cu tab-uri in notepad++ si nu mergea de nici un fel. Dupa informatiile lui Alexandru si ale tale a mers.
Multumesc amdouara.
Bun site, mai ales pentru incepatori.
O zi buna.

Cristian a spus heredoc - 15.06.2015

Am incercat tot ce ati sugerat aici,dar tot eroare imi apare.Initial am folosit notepad++,apoi notepad dar degeaba.Sunt sigur ca gresesc ceva dar nu stiu ce.Astept ajutor!

Alexandru a spus Pentru Cristian - 15.06.2015

Incearca altceva: fa click pe butonul Testeaza din dreapta casetei de cod (care va deschide pagina http://ideone.com/HBiZn ) si copiaza codul de acolo. E acelasi lucru, dar macar poti verifica daca iti functioneaza.

Cristan a spus heredoc - 15.06.2015

Am incercat si varianta ta si tot nu functioneaza.Iata ce-mi afiseaza(ghilimelele sunt puse de mine):"Parse error: syntax error, unexpected '<<' (T_SL) in D:INSTALARIPHPEasyPHP-DevServer-14.1VC11datalocalwebsiruri_de_caractere.php on line 6"

Alexandru a spus Pentru Cristian - 16.06.2015

Vezi ca ai 2 caractere "mai mic" (<<) in loc de 3 (<<<). De asemenea, nu trebuie spatiu intre ele sau dupa ele.

Cristian a spus heredoc - 16.06.2015

Am tot ce trebuie,cel putin asa cred eu,si pentru edificare,as vrea sa-ti trimit o arhiva cu 3 fisiere:unul cu afisarea rezultatului in browser(Mozilla),altul cu codul_sursa din browser si ultimul cu ceea ce am scris eu in Notepad++.
Intrebarea este,pe ce adresa de e-mail sa-ti trimit arhiva.


Adauga un comentariu la aceasta sectiune.

 


Comentarii in PHP    7 ! 

Comentariile sunt portiuni de cod care nu se executa. Sunt folosite de programatori de regula pentru a da diverse explicatii despre logica aplicatiei, variabile si altele. Comentariile nu afecteaza executia unui script si pot fi sterse din cod fara nici un efect.

<?php
// acesta este un comentariu. intreaga linie nu va fi luata in considerare (doar o linie)
// print "hello";
// linia de mai sus nu se executa
 
# la fel ca mai sus 
# print "hello";
# nu se executa
 
/* comentariu cu delimitator de inceput si sfarsit 
   se poate intinde pe oricate linii; se termina la 
   intalnirea marcajului de sfarit */
 
print /* partea asta e ignorata */ "Salut!";
 
/* afiseaza
Salut!
*/
?>
Nota: comentariile /* */ nu pot fi imbricate (inserate unele in altele). Exemplul urmator nu este un cod valid.
<?php
// exemplu gresit de comentariu PHP
/* comentariu /* altul */ inapoi la primul */
?>

Este un lucru foarte util sa folositi comentarii in cod pentru a explica modul de rezolvare a problemei abordate, sau pentru a da detalii despre operatiile efectuate. Acestea va vor ajuta mai tarziu daca veti vrea sa modificati codul scris, sau vor oferi altor persoane informatii (valoroase) despre cum ati gandit codul respectiv.

papuc a spus bun site - 12.08.2013

imi place

Moshu a spus fine>>> - 23.09.2013

misto tutorialul pt. cineva care stie deja html, css... in rest e pierdere de timp, eu unu stiu ceva html .. dar m-a ajutat cu -1 pana acum.. banuiesc ca nici tu nu cunosti php .. un fel de copy/paSTE de ALTUNDEVa>>>PIERDERE DE TIMP(pt. un incepator)..ms. oricum

Alexandru a spus Pentru Moshu - 24.09.2013

Multumesc pentru comentarii, pozitive si negative. Tin sa mentionez ca acest ghid are un public tinta bine definit si este posibil ca tu sa nu faci parte din el. Reciteste cu atentie pagina de prezentare a site-ului, accesibila la http://php.punctsivirgula.ro/?despre si verifica daca te identifici cu ce scrie la sectiunea "Cui i se adreseaza acest site?". Daca nu te incadrezi, poti cauta oricand alte resurse de PHP (cateva locatii sunt indicate si pe pagina http://php.punctsivirgula.ro/start/).
Daca ai nevoie de mai multe lamuriri, de orice fel, te invit sa imi trimiti un email la adresa specificata pe site.

Toate cele bune!
Alexandru,
punctsivirgula.ro

Andreea a spus Multumesc - 17.01.2015

Am inteles mult din acest tutorial!

Dani a spus Multumesc - 19.01.2015

Multumesc din suflet pentru tot ce este aici :D Mare ajutor din partea voastra!

Cristi a spus pentru Alexandru - 09.08.2015

Felicitari Alexandru pentru site.E de mare ajutor! Spor la treaba in continuare!

Paul a spus Mersi - 01.06.2017

Eu pana acum am inteles tot, testarile sunt super, nu am trecut pana acum la pasul urmator, pana nu l-am inteles pe cel anterior. Tot ce trebuie facut e cand testezi sa rescrii personal codul, nu sa faci copy/paste..


Adauga un comentariu la aceasta sectiune.