Va rugam dezactivati programul ad block pentru a vizualiza pagina!

Rezultate pentru tag: aria




Prisma triunghiulară regulată

Aria prismei și volumul prismei. Deducerea formulelor de calcul pentru arie prismă triunghiulară și volum prismă triunghiulară regulată. Aria laterală a prismei triunghiulare regulate. Aria totală a prismei triunghiulare regulate. Volumul unei prisme triunghiulare regulate.

Microscopul. Ochiul uman.

Exemple de instrumente optice cu sisteme centrate de lentile: microscopul (parametri, exemple) şi ochiul uman (componente, acomodarea).

Dispersia luminii.

Definiţia dispersiei. Descompunerea luminii albe în spectrul de radiaţii vizibile. Dispersia în prisma optică. Dispersia normală şi anomală.

Pana optică.

Interferometre cu interferenţă localizată. Pana optică: franje de egală grosime. Inelele Newton.

Difracţia luminii.

Definiţie, exemple. Franje de difracţie printr-o fantă. Reţele de difracţie.

Polarizarea luminii.

Stările de polarizare a luminii. Polarizarea prin reflexie - legea Brewster. Polarizarea prin transmisie - polarizorii. Legea Malus. Birefringenţa.

Noțiuni introductive

Materia, substanțe, molecule, atomi, ioni. Particulele subatomice: electroni, protoni, neutroni. Unitatea atomică de masă (u.a.m.) și sarcina electrică. Numărul atomic Z, numărul de masă A, numărul de neutroni N.

Viteza şi acceleraţia.

Metode de adunare şi scadere a vectorilor. Viteza medie şi viteza momentană. Acceleraţia medie şi acceleraţia momentană.

Lucrul mecanic.

Definiţie. Interpretare geometrică. Forţe conservative. Lucrul mecanic al forţelor elastică şi de greutate.

Ecuaţia undei plane.

Deducerea ecuaţiei undei plane. Proprietăţile undei plane: periodicitatea, intensitatea.

Teoria cinetico-moleculara: aplicaţii.

Deducerea legii Dalton. Extinderea modelului gazului ideal la substanţe reale. Clasificarea stărilor de agregare.

Calorimetrie I.

Lucrul mecanic: definiţie, ecuaţii pentru varii procese. Căldura. Coeficienţi calorici: definţii, tipuri.

Principiul I. Maşina termică.

Principiul I al termodinamicii. Maşina termică. Perpetuum mobile de speţa I şi II. Relaţia Mayer.

Entropia. Principiul II.

Entropia: definiţie, interpretare. Procese reversibile şi ireversibile. Principiul II al termodinamicii.

Mărimile câmpului electric. Capacitatea electrică.

Potenţialul electric, tensiunea electrică, lucrul mecanic electric. Energia potenţială electrostatică. Capacitatea electrică.

Rezistenţa. Legea Ohm.

Rezistenţa şi rezistivitatea electrica. Supraconductibilitatea. Legea Ohm pentru o porţiune şi pentru întregul circuit.

Legea Faraday.

Legea Faraday. Tensiunea electromotoare. Autoinducţia. Inductanţa: definiţie, solenoidul.

Generarea tensiunii alternative.

Energia câmpului magnetic. Exemplu: bobina. Generarea tensiunii electrice alternative. Aplicaţii.

Mărimile curentului alternativ.

Valorile momentane şi valorile efective ale mărimilor curentului alternativ: fluxul, tensiunea, intensitatea.

Proprietăţile funcţiilor sinusoidale.

Proprietăţile funcţiilor sinusoidale: suma şi viteza de variaţie momentană.

Puterea în curent alternativ.

Puterea momentană şi puterea medie. Interpretarea geometrică. Triunghiul puterilor: puterile activă, reactivă şi aparentă.

Circuitul oscilant deschis. Antene.

Circuitul oscilant deschis. Antene dipol de emisie şi recepţie. Clasificarea undelor electromagnetice.

Operaţii cu mulţimi

Operaţii cu mulţimi. Reuniunea mulțimilor. Intersecţia mulțimilor. Diferenţa mulțimilor.

Transformările Galilei. Relativitatea clasică.

Spaţiul şi timpul în fizica clasică. Transformările Galilei. Principiul relativităţii clasice. Electromagnetismul - o excepţie.

Dinamica relativistă. Ecuaţia Einstein.

Dinamica relativistă: masa, impusul şi forţa în fizica relativistă. Ecuaţia Einstein: relaţia masă-energie.

Efectul fotoelectric extern.

Dispozitiv experimental. Legile efectului fotoelectric extern. Eşecul modelului ondulatoriu de a explica efectul.

Efectul Compton.

Dispozitivul experimental. Calculul variaţiei lungimii de undă. Eşecul modelului ondulatoriu şi succesul modelului corpuscular.

Ipoteza de Broglie. Difracţia electronilor.

Dualismul unda-corpuscul: ipoteza de Broglie. Relaţia de Broglie. Difracţia electronilor: legea Bragg.

Relaţia de incertitudine Heisenberg.

Relatia de incertitudine Heisenberg pentru poziţie-impuls şi pentru timp-energie. Consecinţe. Exemple.

Spectre atomice.

Spectre atomice de emisie şi absorbţie: definiţii, proprietăţi. Legea seriilor spectrale ale hidrogenului. Analiza spectrală.

Postulatele Bohr.

Postulatele Bohr ca şi consecinţe ale experimentelor Rutherford şi Franck-Hertz.

Modelul păturilor electronice.

Modelul păturilor electronice pentru atomi cu mai mulţi electroni (Z>1). Numerele cuantice (n,l,m,mS).

Aplicaţii: radiaţiile X.

Radiaţiile X de frânare şi caracteristice: producere şi proprietăţi. Interacţiunea cu substanţa. Aplicaţii.

Tabelul periodic – grupe şi perioade

Tabelul periodic. Grupe, perioade. Legea periodicității. Grupe principale, Grupe secundare. Electron distinctiv. Metale alcaline. Metale alcalino-pământoase. Halogeni.

Aplicaţii ale diodei. Tranzistorul.

Aplicaţii ale diodei: dioda varicap, redresarea curentului alternativ. Tranzistorul cu efect de câmp.

Modele nucleare de structură.

Modele nucleare de structură: modelul picătură de lichid şi modelul în pături.

Variaţia energiei de ionizare

Ion, cation, anion. Proprietăți periodice. Energie de ionizare - definiție, variație în tabelul periodic.

Energia de legătură. Stabilitatea nucleară.

Energia de legătură. Energia de legătură pe nucleon. Platoul de stabilitate. Procese de creştere a stabilităţii.

Variaţia proprietăţilor periodice chimice

Proprietățile periodice chimice. Electronegativitate, caracter metalic, caracter nemetalic, valență. Scara electronegativităţii. Elemente electronegative şi elemente electropozitive. Proprietăţile fizice ale metalelor şi nemetalelor. Caracterul bazic şi caracterul acid al oxizilor metalici. 

Forţe intermoleculare. Legături de hidrogen.

Forțe intramoleculare şi forțe intermoleculare. Legătura de hidrogen, forțe dipol-dipol, forțe de dispersie London, forțe van der Waals. Proprietățile influențate de forțele intermoleculare: punct de fierbere, punct de topire, stare de agregare. 

Forţele dipol-dipol şi forţele de dispersie London

Forțe intermoleculare. Legătura de hidrogen, forțe dipol-dipol, forțe de dispersie London, forțe van der Waals. Punct de fierbere, punct de topire, stare de agregare, electronegativitate.

Starea gazoasă. Legea gazelor ideale.

Gaze reale. Modelul gazului ideal. Legea gazelor ideale. Parametrii de stare ai gazelor. Valori numerice ale lui R (constanta molară a gazelor ideale). Variaţia parametrilor gazelor ideale. Condensarea. 

Legea generală a gazelor

Legea gazelor ideale. Legea lui Avogadro. Parametrii de stare ai gazelor. Ecuaţia lui van der Waals. Aplicaţie.

 

Concentraţia soluţiilor. Cristalohidraţi.

Soluţii. Concentraţia. Concentraţia procentuală şi concetraţia molară. Aplicaţie. Cristalohidraţi. Substanţă anhidră, eflorescenţă, higroscopicitate. 

Concentraţia procentuală - aplicaţii

Soluții, dizolvare. Concentrație procentuală. Masă dizolvată, masa soluției. Aplicații.

Concentraţia molară - aplicaţii

Calculul concentraţiei molare a unei soluţii. Regula de trei simplă. Molaritate. Aplicaţii.

Echilibre chimice – legea acţiunii maselor

Reacţia directă, reacţia inversă. Procedeul Haber, obţinerea amoniacului. Starea de echilibru chimic. Variaţia în timp a concetraţiilor şi a vitezelor de reacţie. Reacţii reversibile. Legea acţiunii maselor. Constanta de echilibru. Aplicaţii – legea acţiunii maselor. 

Echilibre chimice – aplicaţie

Viteza reacţiei directe, viteza reacţiei inverse. Starea de echilibru chimic. Constanta de echilibru. Aplicaţii. 

Factorii care influenţează echilibrele chimice

Principiul lui LeChatelier. Influenţa concentraţiei, a presiunii şi a temperaturii asupra echilibrelor chimice. Reacţii endoterme şi reacţii exoterme. Procedeul Haber-Bosch, obţinerea amoniacului la scală industrială. Reacţii reversibile şi reacţii ireversibile. 

Acizi şi baze. Teoria protolitică.

Reacţia de neutralizare. Acizi, baze. Protonul. Transferul de protoni. Ion hidroniu. Teoria Brönsted-Lowry sau teoria protolitică. Clasificarea acizilor. Acid conjugat, bază conjugată. Cupluri acid-bază conjugate. 

Tăria acizilor şi bazelor – amfoliţi acido-bazici

Acizi tari şi acizi slabi. Ionizarea acizilor tari. Ionizarea acizilor slabi. Constanta de aciditate. Ka. Baze tari şi baze slabe. Ionizarea bazelor tari. Ionizarea bazelor slabe. Constanta de bazicitate, Kb. Caracterul amfoter. Amfoliţi acido-bazici. 

pH-ul soluţiilor apoase

pH – definiţie, semnificaţie matematică. Reacţia de autoprotoliză a apei. Soluţie neutră. Produsul ionic al apei, Kw. Soluţii acide, soluţii neutre şi soluţii bazice. pH neutru, pH bazic şi pH acid. Scala de pH. 

Reacţii redox. Oxidanţi şi reducători.

Transferul de electroni. Reacţia de oxidare. Reacţia de reducere. Numărul de oxidare. Reguli pentru determinarea numerelor de oxidare. Reacţii redox. Agenţi oxidanţi şi agenţi reducători. Caracter oxidant şi carcter reducător. Seria activităţii metalelor. 

Seria activităţii metalelor

Oxidant, reducător. Metale active, metale foarte active şi metale inactive. Atomi metalici, ioni metalici – configuraţia electronică. 

Mulţimi - noţiuni introductive

Noțiuni introductive privind mulțimile. Relația dintre un element și o mulțime (relația de apartenență). Reprezentarea mulțimilor: cu ajutorul diagramelor, prin enumerarea elementelor și prin enunțarea proprietăților caracteristice elementelor. Mulțimi finite. Mulțimi infinite. Mulțimea vidă. Relații între mulțimi. Submulțimi.

Teorema împărţirii cu rest

Împărțirea cu rest a numerelor naturale. Teorema împarțirii cu rest.

Deîmpărţit = cât x împărţitor + rest, restul < împărţitorul (d = c x î + r, r < î)

Proprietăţile divizibilităţii

Proprietățile divizibilității. Proprietăţi ale relaţiei de divizibilitate în mulțimea numerelor naturale N.

Numere prime. Numere compuse

Un număr prim este un număr natural care are exact doi divizori: numărul 1 și numărul în sine. Un număr compus este orice număr natural care are cel puțin 3 divizori. Algoritmul de verificare a numerelor prime.

Fracţii

Noțiunea de fracție. Identificarea în limbajul cotidian sau în probleme a fracţiilor ordinare.

Intervale de numere reale

Noțiunea de interval. Intervale mărginite de numere reale, intervale nemărginite.  Interval deschis, interval închis. Legătura dintre intervale și modul.  Determinarea soluțiilor unor inecuații (în mulțimea numerelor reale) care au necunoscuta în modul.

Rădăcina pătrată a unui număr rațional pozitiv

Noțiunea de radical. Rădăcina pătrată. Extragerea rădăcinii pătrate.

Rapoarte de numere reale reprezentate prin litere

Definirea unui raport algebric. Găsirea domeniului de definiție al unui raport. Amplificarea unui raport. Simplificarea unui raport. Operații cu rapoarte algebrice. Aducerea unei expresii algebrice la forma cea mai simplă.

Inecuaţii în mulțimea numerelor reale

Rezolvarea unor inecuații în mulțimea numerelor reale. Scrierea soluției sub formă de interval.

Sisteme de ecuaţii

Definirea unui sistem de ecuații cu două necunoscute. Soluția unui sistem de ecuații cu două necunoscute.

Ecuaţia de gradul al doilea

Forma unei ecuații de gradul doi. Deducerea formulelor care apar în rezolvarea unei ecuații de gradul al doilea.

Funcţii liniare

Funcție liniară. Trasarea graficului unei funcții liniare. Intersecția dintre graficul unei funcții și axele de coordonate.

Clasificarea triunghiurilor

Clasificarea triunghiurilor după laturi şi după unghiuri: triunghi oarecare, triunghi isoscel, triunghi echilateral, triunghi ascuţitunghic, triunghi dreptunghic, triunghi obtuzunghic

Metoda triunghiurilor congruente - aplicaţii

Pentru a demonstra că două segmente sau unghiuri sunt congruente, căutăm să le încadrăm în două triunghiuri a căror congruenţă poate fi demonstrată. Triunghiuri congruente.

Dreptunghiul

Paralelogramul care are un unghi drept se numește dreptunghi. Proprietățile dreptunghiului. Modalități de a demonstra că un patrulater este dreptunghi.

Teorema lui Pitagora

Într-un triunghi dreptunghic, suma pătratelor lungimilor catetelor este egală cu pătratul lungimii ipotenuzei.

Cercul- definiție, elemente

Definiția cercului. Elementele unui cerc: rază, diametru, coardă. Centrul cercului. Arc de cerc. Semicerc. Puncte diametral opuse. Definiția unui disc.

Poligoane regulate (înscrise în cerc). Calculul elementelor în poligoane regulate

Măsura unui unghi al unui poligon regulat cu n laturi. Măsura unghiului la centru al unui poligon cu n laturi. Latura și apotema unui poligon. Suma măsurilor unghiurilor unui poligon convex. Măsura unui unghi al unui poligon regulat. Formula pentru arie poligon regulat, în funcţie de raza cercului circumscris.

Alcani – proprietăţi chimice

Reacţii care au loc cu scindarea legăturilor C – C. Reacţii care au loc cu scindarea legăturilor C – H. Arderea alcanilor. Reacţia de substituţie – halogenarea alcanilor. Reacţia de dehidrogenare – piroliza, cracarea. Izomerizarea alcanilor. Izomerizarea n-butanului. Cifra octanică a benzinelor. Solubilitatea alcanilor. 

Alchene – proprietăţi chimice

Reacţii specifice hidrocarburilor nesaturate – reacţii de adiţie, de oxidare şi de polimerizare. Hidrogenarea alchenelor, halogenarea alchenelor, adiţia hidracizilor la alchene, adiţia apei la alchene. Oxidare blândă şi oxidare energică. Reacţii comune cu hidrocarburile saturate – reacţii de ardere, reacţii de substituţie. Regula lui Markovnikov. Polimeri vinilici. 

Arene – proprietăţi chimice (substituţie la nucleul aromatic)

Reacţiile specifice hidrocarburilor aromatice. Reacţii de substituţie la nucleul benzenic. Orientarea reacţiilor de substituţie. Substituenţi de gradul I. Substituenţi de gradul II. Nitrarea toluenului. Reacţia de halogenare a benzenului şi a naftalinei. Reacţia de sulfonare a benzenului şi a naftalinei. Reacţia de alchilare Friedel – Crafts. Reacţia de acilare Friedel – Crafts. 

Legături covalente în compuşii organici

Tipuri de catene de atomi de carbon. Tipuri de legături covalente în compuşii organici. Orbitali moleculari de legătură. Hibridizare. Orbitali hibrizi. Hibridizare sp3. Hibridizare sp2. Hibridizare sp. Caracteristicile legăturilor covalente. Legătură σ, legătură π, geometrie tetraedrică, geometrie trigonal-planară, geometrie liniară.

Reacţii de halogenare

Halogenarea prin reacţii de substituţie – halogenarea alcanilor, halogenarea în poziţie alilică, halogenarea în poziţie benzilică, halogenarea nucleului aromatic. Halogenarea prin reacţii de adiţie – adiţia halogenilor la alchene, adiţia halogenilor la alchine, adiţia halogenilor la alcadiene, adiţia halogenilor la benzen, adiţia hidracizilor la alchene, adiţia hidracizilor la alchine.

Reacţii de condensare şi policondensare

Reacţii de condensare între compuşii carbonilici – condensarea aldolică şi crotonică. Componentă carbonilică şi componentă metilenică. Reacţii de policondensare. Obţinerea şi proprietăţile fenoplastelor – bachelita şi novolacul. 

Grăsimi

Acizii graşi saturaţi. Acizi graşi nesaturaţi. Trigliceride simple şi mixte. Grăsimi saturate. Grăsimi nesaturate. Grăsimi mononesaturate. Omega 3. Grăsimi trans. Acţiunea grăsimilor asupra organismului uman. 

Alcooli – proprietăţi chimice

Caracteristicile grupei funcţionale hidroxil. Reacţia cu metalele alcaline. Reacţia de deshidratare (eliminarea apei). Reactivitatea alcoolilor în funţie de structură. Deshidratarea intramoleculară şi deshidratarea intermoleculară a alcoolilor. Obţinerea eterilor. Oxidarea alcoolilor – oxidarea blândă şi oxidarea energică. Reacţia de esterificare – esteri organici şi esteri anorganici. 

Aria cercului (discului); Aria sectorului de cerc

Formula de calcul pentru aria cercului. Aria discului. Aria sectorului de cerc. Exemplu de calcul pentru aria cercului.

Aminoacizi

Proteine, peptide, aminoacizi. Legătură peptidică, rest de aminoacid. Cei 20 de aminoacizi naturali. Structura aminoacizilor. Sistemul D, L. Aminoacizii - seria sterică L. Reacţii stereospecifice. Proprietăţi chimice ale aminoacizilor. Amfion (formă dipolară). Clasificarea aminoacizilor în funcţie de polaritatea radicalului hidrocarbonat. Caracterul amfoter al aminoacizilor. Soluţii tampon. 

Proteine - structura primară

Proteine - polimeri ai aminoacizilor. Policondensarea aminoacizilor. Hidroliza proteinelor. Structura proteinelor. Structura primară - secvenţa resturilor de aminoacizi. Corelaţia structură - funcţie. Conformaţie. Legătura peptidică - proprietăţi.

Mulțimea numerelor întregi. Axa numerelor

Mulțimea numerelor întregi. Numere întregi pozitive și negative. Reprezentarea pe axă a numerelor întregi.

Inecuații în mulțimea numerelor întregi

Rezolvarea inecuațiilor în mulțimea numerelor întregi. Inecuații cu modul

Mulțimea numerelor reale

Număr real. Mulțimea numerelor reale. Definiția unui număr irațional. Numere iraționale. Relația de incluziune dintre mulțimile N, Z, Q, R.

 

Ecuații în mulțimea numerelor reale

Rezolvarea ecuațiilor în mulțimea numerelor reale. Ecuații de gradul I. Ecuații simple de gradul al II-lea.

Mulțimea numerelor raționale

Numere raționale. Mulțimea numerelor raționale. Forme de scriere a unui număr rațional. Transformarea fracțiilor ordinare în fracții zecimale.

Aria pătratului

Formula pentru arie pătrat. Exercițiu cu aria unui pătrat.

Patrulatere

Pătrat, dreptunghi, romb, paralelogram, trapez. Prezentare prin descriere și desen. 

Corpuri geometrice

Cubul, paralelipipedul dreptunghic, piramida, cilindrul, conul, sfera. Recunoașterea elementelor: muchii, fețe, vârfuri.

Aria unui dreptunghi

Deducerea formulei pentru arie dreptunghi. Exemplu de calcul pentru aria dreptunghiului.

Aria unui pătrat

Deducerea formulei pentru arie pătrat. Exemplu de calcul pentru aria pătratului.

Aria paralelogramului

Formula pentru arie paralelogram. Înălțimea unui paralelogram. Aria paralelogramului folosind sinusul. Probleme cu aria unui paralelogram.

Aria rombului

Formula pentru arie romb. Aria rombului folosind sinusul. Probleme cu aria unui romb.

Aria trapezului

Formula pentru arie trapez. Înălțimea unui trapez. Probleme cu aria unui trapez.

Teorema bisectoarei

Bisectoarea unui unghi determină pe latura opusă segmente proporționale cu celelalte două laturi.

Latura, apotema și aria triunghiului echilateral înscris în cerc

Latura triunghiului echilateral în funcție de raza cercului circumscris. Apotema triunghiului echilateral în funcție de raza cercului circumscris. Formula pentru arie triunghi echilateral în funcție de raza cercului circumscris.

Latura, apotema și aria pătratului înscris în cerc

Latura pătratului în funcție de raza cercului circumscris. Apotema pătratului în funcție de raza cercului circumscris. Formula pentru arie pătrat în funcție de raza cercului circumscris.

Latura, apotema și aria hexagonului regulat înscris în cerc

Latura unui hexagon regulat în funcție de raza cercului circumscris. Formula pentru apotemă hexagon regulat în funcție de raza cercului circumscris. Formula pentru arie hexagon regulat în funcție de raza cercului circumscris. Perimetrul hexagonului.

Noţiuni de termochimie, partea I

Tipuri de energie. Termodinamică – definiţie. Energie potenţială. Energie gravitaţională. Lucru mecanic. Căldură. Energie internă. Variaţia energiei interne într-un sistem termodinamic. 

Entalpia

Energie cinetică. Energie potenţială. Energie internă. Funcţii de stare şi funcţii de proces. Variabile de stare. Mărimi de stare extensive şi intensive. Transfer de energie internă. Entalpia. Semnificaţia relaţiei de definire a entalpiei. Variaţia entalpiei. Calorimetrie. 

Legea lui Hess. Entalpia de formare standard.

Termochimie. Variaţia entalpiei în reacţiile endoterme. Variaţia entalpiei în reacţiile exoterme. Legea aditivităţii căldurilor de reacţie – Legea lui Hess. Condiţii standard de reacţie. Entalpia molară de formare standard. 

Căldura de combustie

Combustie. Tipuri de combustibili. Entalpia de combustie standard. Ardere completă şi ardere incompletă. Căldura de combustie. Puterea calorică. Condiţii normale pentru măsurarea puterii calorice. Putere calorică inferioară şi putere calorică superioară. 

Aplicaţii

Căldura specifică, c. Căldura specifică molară. Exemple de calcul pentru capitolul termochimie. 

Viteza de reacţie

Cinetica chimică – definiţie. Viteza medie de reacţie. Variaţia concentraţiei reactanţilor şi a produşilor de reacţie în timp. Exemplu de calcul pentru viteza medie de reacţie. Clasificarea reacţiilor chimice în funcţie de viteza de reacţie. Reacţii rapide. Reacţii cu viteză moderată. Reacţii lente. Măsurarea vitezei de reacţie. 

Energia de activare. Teoria complexului activat.

Redistribuirea legăturilor chimice în timpul unei reacţii. Ciocniri eficace. Ciocniri ineficace. Energie de activare. Stare de tranziţie sau complex activat. Energia potenţială a complexului activat. Reprezentarea grafică a energiei de activare pentru o reacţie endotermă şi pentru o reacţie exotermă. Energia de activare a reacţiei directe şi energia de activare a reacţiei inverse. Teoria complexului activat. Condiţia geometrică şi condiţia energetică pentru ciocniri eficace. 

Legea vitezei de reacţie

Viteza de reacţie. Variaţia vitezei de reacţie în funcţie de concentraţia reactanţilor şi în funcţie de concentraţia produşilor. Legea vitezei de reacţie. Expresia matematică a vitezei de reacţie. Constanta vitezei de reacţie. Ordine parţiale de reacţie. Ordin total de reacţie. Ordine parţiale de reacţie vs coeficienţi stoechiometrici. 

Influenţa suprafeţei de contact şi a temperaturii asupra vitezei de reacţie

Factorii care influenţează viteza de reacţie. Influenţa suprafeţei de contact asupra vitezei de reacţie. Influenţa temperaturii asupra vitezei de reacţie. Dependenţa constantei de viteză de temperatură. Relaţia lui Arrhenius. Semnificaţia matematică a elementelor din relaţia lui Arrhenius. Determinarea energiei de activare. Metoda grafică de determinare a energiei de activare. 

Influenţa catalizatorilor asupra vitezei de reacţie

Catalizatori – definiţie şi mod de funcţionare. Reprezentarea grafică a energiei de activare pentru o reacţie necatalizată şi o reacţie catalizată. Etapa determinantă de viteză. Reacţii catalitice. Proprietăţile catalizatorilor - activitatea catalitică, selectivitatea. Promotorii şi otrăvurile. Tipuri de reacţii catalitice –reacţii omogene, eterogene şi enzimatice. Suport catalitic. Inhibitori. 

Aplicaţii

Timp de înjumătăţire. Unităţi de măsură pentru constanta de viteză. Exemple de calcul. 

Paralelipipedul dreptunghic

Aria paralelipipedului și volumul paralelipipedului. Deducerea formulelor de calcul pentru arie paralelipiped și volum paralelipiped dreptunghic. Aria laterală a paralelipipedului. Aria totală a paralelipipedului. Volumul unui paralelipiped dreptunghic.

Cubul

Aria cubului și volumul cubului. Deducerea formulelor de calcul pentru arie cub și volum cub. Aria laterală a cubului. Aria totală a cubului. Volumul cubului.

Ecuații în mulțimea numerelor naturale

Exprimarea ecuațiilor cu ajutorul balanțelor. Rezolvarea principalelor tipuri de ecuații date în mulțimea numerelor naturale

Puteri cu exponent întreg

Puterea cu exponent întreg a unui număr real. Proprietățile puterilor cu exponent întreg. Inversul unui număr. Calculul puterilor cu exponent negativ.

Puteri cu exponent rațional

Puteri cu exponent rațional. Proprietățile puterilor cu exponent rațional. Scrierea puterilor cu exponent rațional cu ajutorul radicalilor. Ordonarea puterilor, compararea puterilor cu exponent rațional. 

Radicali de ordin n

Radicalul de ordin n dintr-un număr real pozitiv. Radicalul de ordin impar dintr-un număr negativ. Proprietățile radicalilor de ordin superior: produsul radicalilor, câtul a doi radicali, puterea unui radical, amplificarea, simplificarea radicalilor, compunerea radicalilor, scoaterea factorilor de sub radical și introducerea factorilor sub radical.

Compararea radicalilor

Aducerea radicalilor la același ordin. Compararea radicalilor de ordin n. Exerciții de ordonare a radicalilor de ordin superior.

Ecuații de gradul I

Forma generală e ecuațiilor de gradul I. Modalitatea teoretică de rezolvare a unei ecuații de gradul întâi. Interpretarea geometrică pentru ecuația de gradul I. Ecuații cu parametru real- exerciții.

Inecuații de gradul I

Forma generală a inecuațiilor de gradul I cu o necunoscută. Modalitatea teoretică de rezolvare a unei inecuații de gradul întâi. Ecuații cu modul, explicitarea modulului.

Funcția de gradul II

Funcția de gradul al doilea: definiția funcției de gradul II. Noțiuni introductive. Probleme care conduc la funcția de gradul doi. Exemple de funcții de gradul doi. Graficul unei funcții de gradul II.

Monotonia funcției de gradul II

Funcția de gradul II, forma canonică a funcției de gradul al doilea. Punct de minim, punct de maxim. Vârf parabolă- coordonate. Tabel de variație, monotonia funcției de gradul al doilea.

Rezolvarea ecuațiilor de gradul II în mulțimea numerelor complexe

Ecuații de gradul al doilea cu soluții complexe. Formarea ecuației de gradul doi când se cunosc soluțiile complexe. Descompunerea trinomului de gradul doi în factori liniari.

Numere complexe scrise sub formă algebrică

Forma algebrică a numerelor complexe. Partea reală a unui număr complex. Partea imaginară a unui număr complex. Definirea operațiilor algebrice cu numere complexe. Puterile numărului complex i. Numere complexe conjugate. Determinarea raportului dintre două numere complexe. Modulul unui număr complex. Conjugatul unui număr complex.

Forma trigonometrică a numerelor complexe

Numere complexe exprimate trigonometric. Coordonate polare în plan. Raza polară. Argumentul unui număr complex. Pentru a determina argumentul redus al unui număr complex vom ține cont de cadranul în care se află imaginea geometrică a numărului complex.

Ridicarea la putere cu exponent natural a fracțiilor zecimale

Ridicarea la putere a fracțiilor zecimale. Calculul unor puteri care au exponentul număr natural și baza număr zecimal. Reguli de calcul cu puteri.

Operații cu intervale de numere reale

Reuniunea intervalelor. Intersecția intervalelor. Diferența dintre un interval și o mulțime finită.

Raționalizarea numitorului (2)

 Raționalizarea numitorului de forma   a plus-or-minus square root of b Expresii conjugate.

Piramida triunghiulară regulată

Aria piramidei și volumul piramidei. Deducerea formulelor de calcul pentru arie piramidă triunghiulară regulată și volum piramidă triunghiulară regulată. Aria laterală a piramidei triunghiulare regulate. Aria totală a piramidei triunghiulare regulate. Volumul unei piramide triunghiulare regulate.

Piramida patrulateră regulată

Aria piramidei și volumul piramidei. Deducerea formulelor de calcul pentru arie piramidă patrulateră regulată și volum piramidă patrulateră regulată. Aria laterală a piramidei patrulatere regulate. Aria totală a piramidei patrulatere regulate. Volumul unei piramide patrulatere regulate.

Piramida hexagonală regulată

Aria piramidei și volumul piramidei. Deducerea formulelor de calcul pentru arie piramidă hexagonală regulată și volum piramidă hexagonală regulată. Aria laterală a piramidei hexagonale regulate. Aria totală a piramidei hexagonale regulate. Volumul unei piramide hexagonale regulate.

Trunchiul de piramidă regulată

Aria trunchiului de piramidă și volumul trunchiului de piramidă. Deducerea formulelor de calcul pentru arie trunchi de piramidă regulată și volum trunchi de piramidă regulată. Aria laterală a trunchiului de piramidă regulată. Aria totală a trunchiului de piramidă regulată. Volumul unui trunchi de piramidă regulată.

Cilindrul circular drept

Descrierea cilindrului circular drept. Elementele unui cilindru circular drept. Înălțimea cilindrului. Generatoarea unui cilindru. Secțiunea axială a cilindrului. Desfășurarea unui cilindru circular drept. Aria cilindrului și volumul cilindrului. Deducerea formulelor de calcul pentru arie cilindru circular și volum cilindru circular. Aria laterală a cilindrului circular drept. Aria totală a cilindrului circular drept. Volumul cilindrului circular drept.

Conul circular drept

Descrierea conului circular drept. Elementele unui con circular drept. Înălțimea conului. Generatoarea conului. Secțiunea axială a conului. Desfășurarea unui con circular drept. Aria conului și volumul conului. Deducerea formulelor de calcul pentru arie con circular și volum con circular. Aria laterală a conului circular drept. Aria totală a conului circular drept. Volumul conului circular drept.

Trunchiul de con circular drept

Descrierea trunchiului de con circular drept. Elementele unui trunchi de con circular drept. Înălțimea trunchiului de con. Generatoarea trunchiului de con. Secțiunea axială a trunchiului de con. Desfășurarea unui trunchi de con circular drept. Aria trunchiului de con și volumul trunchiului de con. Deducerea formulelor de calcul pentru arie trunchi de con și volum trunchi de con. Aria laterală a trunchiului de con circular drept. Aria totală a trunchiului de con circular drept. Volumul trunchiului de con circular drept.

Sfera

Descrierea unei sfere. Formulele de calcul pentru arie sferă și volum sferă. Probleme cu aria sferei și volumul sferei.

Reprezentarea geometrică a numerelor complexe

Imaginea geometrică a unui număr complex. Interpretarea geometrică a modulului unui număr complex. Interpretarea geometrică a sumei și a diferenței a două numere complexe. Interpretarea geometrică a numerelor complexe opuse și a numerelor complexe conjugate.

Noțiuni introductive de logică matematică

Noțiuni generale de logică matematică: propoziții, predicate, cuantificatori. Cuantificatorul existențial, cuantificatorul universal.Propoziție existențială, propoziție universală. Valoarea de adevăr a unei propoziții, mulțimea de adevăr a unui predicat. Propoziții adevărate, propoziții false. Principiile logicii matematice. Exerciții de stabilire a valorii de adevăr a unor propoziții.

Metoda inducției matematice

Inducție matematică. Etapele principiului inducției matematice (etapa de verificare, etapa de demonstrație). Demonstrația unei propoziții matematice folosind principiul inducției matematice.

Simbolul Sigma și calculul unor sume

Scrierea unor sume restrâns cu ajutorul simbolului Sigma. Proprietățile simbolului Sigma. Calculul unor sume, demonstație prin inducție matematică. Metoda coeficienților nedeterminați.

Șiruri mărginite

Șir mărginit superior, șir mărginit inferior. Mărginirea șirurilor. Definiția șirurilor mărginite, exemple de șiruri mărginite.

Șiruri monotone

Șir crescător, șir descrescător, șir monoton. Definiția șirurilor monotone. Metode prin care se poate studia monotonia șirurilor. Exemple de șiruri monotone.

Progresii geometrice- noțiuni introductive

Noțiunea de progresie geometrică. Proprietățile progresiei geometrice. Exemple de progresii geometrice. 

Funcții mărginite

Imaginea unei funcții, noțiunea de funcție mărginită. Graficul unei funcții mărginite. Mărginirea unei funcții numerice.

Funcții pare, funcții impare

Funcție pară, funcție impară. Exemple de funcții pare, funcții impare. Graficul unei funcții pare. Graficul unei funcții impare. Proprietăți ale graficelor. Paritatea funcțiilor - exerciții.

Funcții periodice

Noțiunea de funcție periodică, noțiunea de perioadă, perioadă principală. Exemple de funcții periodice. Proprietăți ale funcțiilor periodice. Graficul unei funcții periodice - proprietate. Periodicitatea funcțiilor - exerciții. 

Monotonia funcțiilor numerice

Funcție crescătoare, funcție descrescătoare, funcție monotonă. Exemple de funcții monotone. Modalități de a studia monotonia funcțiilor. Intervale de monotonie. Exerciții de stabilire a monotoniei funcțiilor.

Compunerea funcțiilor

Compunerea funcțiilor. Proprietăți ale compunerii funcțiilor. Exerciții- funcții compuse.

Funcții numerice- noțiuni introductive

Noțiunea de funcție numerică, modalități de definire a unei funcții numerice și exemple de funcții. Graficul unei funcții. Reprezentarea grafică a unei funcții numerice.

Operații cu funcții numerice

Operații cu funcții: suma funcțiilor, produsul funcțiilor, câtul funcțiilor.

Semnul funcției de gradul I

Semnul funcției de gradul I. Exerciții de stabilire a semnului funcției de gradul I. Semnul unor expresii algebrice. Rezolvarea unor ecuații cu modul și inecuații cu modul, folosind semnul funcției de gradul I.

Relațiile lui Viete. Natura și semnele rădăcinilor ecuației de gradul II

Legătura dintre rădăcinile reale ale ecuației de gradul al doilea și coeficienții acesteia. Formarea ecuației de gradul al doilea când se cunosc rădăcinile. Natura rădăcinilor și semnele rădăcinilor ecuației de gradul al doilea.

Înmulțirea vectorilor cu scalari

Înmulțirea unui vector cu un scalar. Proprietăți ale înmulțirii vectorilor cu scalari.

Descompunerea unui vector într-un reper cartezian

Noțiunea de versor. Descompunerea unui vector după doi vectori dați. Coordonatele unui vector. Înmulțirea unui vector cu un scalar. Suma vectorilor. Coliniaritatea vectorilor. Vectori egali. Formula de calcul pentru lungimea unui vector exprimat cu ajutorul versorilor. Modulul unui vector. Expresia analitică a unui vector.

Vectori în reper cartezian

Vectori exprimați cu ajutorul versorilor: coordonatele unui vector, modulul unui vector.

Vectori coliniari

Vectori coliniari, condiția de coliniaritate a doi vectori.

Echilibre acido-bazice. Tăria acizilor. Exponentul de aciditate.

Protonul și ionul de hidrogen. Ionul hidroniu și ionul hidroxil. Teoria protolitică Brønsted-Lowry. Cuplu acid-bază conjugată. Echilibru acido-bazic. Constanta de aciditate. Disocierea în apă a acizilor tari. Disocierea în apă a acizilor slabi. Exemple de acizi tari. Exemple de acizi slabi. 

Tăria bazelor. Constanta de bazicitate și exponentul de bazicitate.

Disocierea bazelor tari în apă. Disocierea bazelor slabe în apă. Exemple de baze tari și baze slabe. Constanta de bazicitate. Exponentul de bazicitate. Apa - substanță amfoteră (amfolit acido-bazic). Produsul ionic al apei. 

pH-ul soluțiilor apoase de acizi

Definiție pH. Produsul ionic al apei. pH și pOH. Calculul concentrației ionilor hidroniu pentru soluțiile de acizi tari și pentru soluțiile de acizi slabi. Calculul pH-ului pentru soluțiile de acizi tari și pentru soluțiile de acizi slabi. Exemplu de calcul pH pentru o soluție de acid tare. Exemplu de calcul pH pentru o soluție de acid slab. 

pH-ul soluțiilor apoase de baze

Calculul concentrației ionilor hidroxil din soluțiile de baze tari și din soluțiile de baze slabe. Calculul concentrației ionilor hidroniu din soluțiile de baze tari și din soluțiile de baze slabe. Calculul pH-ului soluțiilor de baze tari și al soluțiilor de baze slabe. Exemplu de calcul pH pentru o soluție de bază tare. Exemplu de calcul pH pentru o soluție de bază slabă (o soluție de amoniac). 

Reacția de neutralizare în soluții apoase

Reacția de neutralizare - definiție. Neutralizarea unui acid tare cu o bază tare. Ioni spectatori. Căldura molară de neutralizare. Formarea sărurilor prin neutralizarea unui acid tare cu o bază tare. Reacția dintre un acid slab și o bază tare. Reacția dintre un acid tare și o bază slabă. 

Titrări acido-bazice

Reacția de neutralizare. Titrare acido-bazică. Punct de echivalență. Indicatori acido-bazici. Domeniu de viraj. Exemple de indicatori acido-bazici: metiloranj, turnesol, fenolftaleină. Biuretă. Exemplu de calcul: aflarea concentrației unei soluții de acid clorhidric prin titrare acido-bazică cu o soluție de hidroxid de sodiu de concentrație cunoscută. 

Hidroliza sărurilor

Sărurile - compuși ionici. Comportamentul anionilor în apă. Comportamentul cationilor în apă. Reacția de hidroliză. Săruri care formează soluții neutre (săruri provenite de la acizi tari și baze tari). Săruri care formează soluții acide (săruri provenite de la acizi tari și baze slabe). Săruri care formează soluții bazice (săruri provenite de la acizi slabi și baze tari). Săruri provenite de la acizi slabi și baze slabe. Hidroliza azotatului de sodiu (NaNO3), hidroliza clorurii de amoniu (NH4Cl), hidroliza sulfurii acide de sodiu (NaHS), hidroliza cianurii de amoniu (NH4CN). Aplicații; calculul pH-ului unei soluții de sare. 

Șiruri

Șiruri, notații, moduri de a defini un șir. Șir definit descriptiv, șir definit printr-o regulă de calcul, șir definit printr-o relație de recurență. Termenii unui șir. Rangul unui termen. Exemple de șiruri.

Progresii aritmetice- noțiuni introductive

Noțiunea de progresie aritmetică, rația progresiei, proprietățile progresiei aritmetice. Exemple de progresii aritmetice. 

Proprietățile progresiei aritmetice

Termenul general al unei progresii aritmetice în funcție de primul termen și de rație. Proprietățile progresiei aritmetice. Condiția ca n numere sa fie în progresie aritmetică. Suma primilor n termeni ai unei progresii aritmetice. 

Funcția de gradul I

Funcția de gradul întâi. Graficul funcției de gradul I, intersecția cu axele. Monotonia unei funcții de gradul I. Reprezentarea grafică a funcției de gradul I, funcții definite pe ramuri.

Măsurarea unghiurilor

Măsurarea unghiurilor în grade sexagesimale și radiani. Transformarea gradelor în radiani. Tranformarea radianilor în grade.

Operații cu numere complexe scrise sub formă algebrică

Adunarea numerelor complexe. Scăderea numerelor complexe. Modulul unui număr complex. Conjugatul unui număr complex. Înmulțirea numerelor complexe. Raportul a două numere complexe. Egalitatea a două numere complexe.

Funcția cosinus

Funcția cosinus. Proprietăți: semnul funcției cosinus, periodicitate, paritate, monotonie. Graficul funcției cosinus.

Funcția tangentă

Funcția tangentă. Proprietăți: semnul funcției tangentă, periodicitate, paritate, monotonie. Graficul funcției tangentă.

Funcția cotangentă

Funcția cotangentă. Proprietăți: semnul funcției cotangentă, periodicitate, paritate, monotonie. Graficul funcției cotangentă.

Reducerea la primul cadran

Calculul funcțiilor trigonometrice folosind formule de reducere la primul cadran. Trecerea din cadranul II în cadranul I. Trecerea din cadranul III în cadranul I. Trecerea din cadranul IV în cadranul I.

Funcția sinus

Funcția sinus. Proprietăți: semnul funcției sinus, periodicitate, paritate, monotonie. Graficul funcției sinus.

Operații cu permutări

Compunerea permutărilor de grad n.Proprietăți ale compunerii permutărilor de grad n. puterea unei permutări de grad n.Proprietăți ale transpozițiilor.

Înmulțirea numerelor complexe scrise sub formă trigonometrică

Operații cu numere complexe exprimate trigonometric: înmulțirea numerelor complexe. Modulul produsului. Argumentul produsului.

Ridicarea la putere a numerelor complexe sub formă trigonometrică

Operații cu numere complexe exprimate trigonometric: ridicarea la putere a unui număr complex. Formula lui Moivre. Modulul puterii. Argumentul puterii.

Împărțirea numerelor complexe sub formă trigonometrică

Operații cu numere complexe exprimate trigonometric: împărțirea numerelor complexe. Modulul câtului. Argumentul câtului.

Funcția putere cu exponent natural

Funcția putere cu exponent natural și proprietățile acesteia: paritate, monotonie, semnul funcției. Graficul funcției putere cu exponent natural.

Funcția radical de ordin n

Funcția radical de ordin n și proprietățile acesteia. Graficul funcției radical de ordin n.

Funcția exponențială

Noțiunea de creștere exponențială, descreștere exponențială. Funcția exponențială și proprietățile acesteia. Grafice de funcții exponențiale.

Funcția logaritmică

Funcția logaritmică și proprietățile acesteia. Graficul funcției logaritmice.

Funcţie continuă într-un punct

Definiţia unei funcţii continue într-un punct. Punct de continuitate. Puncte de discontinuitate.

Integrarea prin schimbare de variabilă (1)

Metode de calcul pentru integrale definite: metoda integrării prin substituţie. Prima metodă de schimbare de variabilă.

Integrarea prin schimbare de variabilă (2)

Metode de calcul pentru integrale definite: metoda integrării prin substituţie. A doua metodă de schimbare de variabilă.

Aria unei suprafeţe plane

Aria unui subgrafic. Aria suprafeţelor plane cuprinse între două curbe.

Aria triunghiului exprimată cu ajutorul coordonatelor vârfurilor sale

Formula ariei triunghiului când se cunosc coordonatele vârfurilor.

Noţiuni de statistică matematică

Noţiuni de statistică matematică: populaţie statistică, noţiunea de caracteristică a unei populaţii, frecvenţa absolută, frecvenţa relativă, frecvenţa cumulată.

Elemente caracteristice ale unei serii statistice

Interpretarea datelor statistice: media, mediana, modulul, dispersia, abaterea medie pătratică.

Evenimente

Evenimente. Operaţii cu evenimente.

Variabile aleatoare

Variabile aleatoare: tabelul de distribuţie, media, modulul, dispersia şi amplitudinea unei variabile aleatoare.

Elementul HTML head

Elementul <head> este un container pentru metadate (date despre date) și este plasat între eticheta <html> și eticheta <body>.
<head> Definește informații despre document.
<titlu> Defineste titlul unui document.
<base> Definește o adresă implicită sau o țintă implicită pentru toate linkurile dintr-o pagină.
<link> Definește relația dintre un document și o resursă externă.
<meta> Definește metadatele despre un document HTML.
<script> Definește un script din partea clientului.
<style> Definește informațiile despre stil pentru un document.
HTML5 a introdus o metodă pentru a permite proiectanților web să preia controlul asupra viewport-ului, prin eticheta <meta>.
Viewport este zona vizibilă a utilizatorului unei pagini web. Aceasta variază în funcție de dispozitiv și va fi mai mică pe un telefon mobil decât pe ecranul computerului.
Ar trebui să includeți următorul element viewport <meta> în toate paginile web.
Partea width=device-width stabilește lățimea paginii pentru a urma lățimea ecranului dispozitivului (care va varia în funcție de dispozitiv).
Partea initial-scale=1.0  setează nivelul inițial de zoom când prima pagină este încărcată de browser. 

Elemente de cod HTML pentru computer

Elementele de cod HTML pentru computer sunt:
<code> Defineste codul de programare.
<kbd> Definește introducerea tastaturii.
<samp> Definește ieșirea computerului.
<var> Definește o variabilă.
<pre>Definește un text preformatat.

Ghid de stil în HTML5

O utilizare constantă a stilului face mai ușor pentru alții să înțeleagă HTML-ul.
În viitor, programe precum cititorii XML ar putea dori să citească HTML-ul.
Utilizarea unei sintaxe bine formate - „aproape de XHTML” poate fi inteligentă.
Vă recomandăm să folosiți numele elementelor scrise cu litere mici, deoarece:
În HTML5, nu trebuie să închideți toate elementele (de exemplu elementul <p>).
Vă recomandăm să închideți toate elementele HTML.
Închideți elementele HTML goale
În HTML5, este opțional să închideți elementele goale.
HTML5 permite amestecarea literelor mari și a literelor mici în nume de atribute.
Vă recomandăm să folosiți nume de atribute scrise culitere mici.
HTML5 permite ca valorile atributelor să fie scrise fără ghilimele.
Vă recomandăm să puneți între ghilimele valorile atributului.
Adăugați întotdeauna atributul alt la imagini. Acest atribut este important atunci când imaginea din anumite motive nu poate fi afișată. De asemenea, definiți întotdeauna lățimea și înălțimea (width și height) imaginii. Reduce pâlpâirea, deoarece browserul poate rezerva spațiu pentru imagine înainte de încărcare.
HTML5 permite spații în jurul semnelor egale. Dar fără spațiu este mai ușor de citit și grupează entitățile mai bine împreună.
Când utilizați un editor HTML, este incomod să derulați la dreapta și la stânga pentru a citi codul HTML.
Încercați să evitați liniile de cod mai lungi de 80 de caractere.
Nu adăugați linii necompletate fără un motiv.
Pentru lizibilitate, adăugați linii goale pentru a separa blocuri de coduri mari sau logice.
Pentru lizibilitate, adăugați două spații de indentare. Nu folosiți tasta tab.
Nu folosiți linii necompletate și indentate. Nu este necesar să indentizați fiecare elemen
În HTML5, eticheta <html> și eticheta <body> pot fi omise.
Nu vă recomandăm să omiteți etichetele <html> și <body>.
Elementul <html> este rădăcina documentului. Este locul recomandat pentru specificarea limbii paginii.
Omiterea <html> sau <body> poate bloca software-ul DOM și XML.
Omiterea <body> poate produce erori în browserele mai vechi (IE9).
În HTML5, eticheta <head> poate fi omisă.
În mod implicit, browserele vor adăuga toate elementele înainte de <body> la un element implicit <head>.
Puteți reduce complexitatea HTML prin omiterea etichetei <head>
Elementul <title> este necesar în HTML5. Faceți titlul cât mai semnificativ posibil
HTML5 a introdus o metodă pentru a permite proiectanților web să preia controlul asupra viewport-ului, prin eticheta <meta>.
Viewport este zona vizibilă a utilizatorului unei pagini web. Acesta variază în funcție de dispozitiv și va fi mai mic pe un telefon mobil decât pe ecranul computerului.
Lățimea (width) = partea lățimii dispozitivului (width=device-width part) - stabilește lățimea paginii pentru a urma lățimea ecranului dispozitivului (screen-width) (care va varia în funcție de dispozitiv).
Partea inițială = 1,0 setează nivelul de zoom inițial atunci când pagina este încărcată prima dată de browser
Comentariile scurte trebuie scrise pe o singură linie
Comentariile lungi sunt mai ușor de observat dacă sunt indentate în două spații.
Utilizați sintaxa simplă pentru a face legătura cu foile de stil (atributul tip nu este necesar)
Regulile scurte pot fi comprimate
Regulile lungi trebuie scrise pe mai multe rânduri
Puneți suportul de deschidere (opening bracket) pe aceeași linie cu selectorul.
Utilizați un spațiu înainte de suportul de deschidere (opening bracket).
Folosiți două spații de indentare.
Utilizați punct și virgulă după fiecare pereche proprietate-valoare, inclusiv ultima.
Utilizați ghilimele în jurul valorilor numai dacă valoarea conține spații.
Plasați suportul de închidere (opening bracket) pe o linie nouă, fără spații de conducere.
Evitați liniile de peste 80 de caractere.
Se încarcă JavaScript în HTML
Accesarea elementelor HTML cu JavaScript
Utilizați numele de fișiere scrise cu litere mici
Fișierele HTML ar trebui să aibă o extensie .html sau .htm.
Fișierele CSS ar trebui să aibă o extensie .css.
Fișierele JavaScript ar trebui să aibă o extensie .js.
Nu există nicio diferență între extensiile .htm și .html. Ambele vor fi tratate ca HTML de orice browser web sau server web.
Când o adresă URL nu specifică un nume de fișier (cum ar fi https://www.lectii-virtuale.ro/css/), serverul returnează un nume de fișier implicit. Numele de fișiere implicite obișnuite sunt index.html, index.htm, default.html și default.htm.
Dacă serverul dvs. este configurat doar cu "index.html" ca nume de fișier implicit, fișierul dvs. trebuie numit "index.html", nu "index.htm."

Grafică HTML

Pentru a desena grafică pe o pagină web este utilizat elementul HTML <canvas> .
Elementul HTML <canvas> este utilizat pentru a desena grafică, din nou, prin JavaScript.
Elementul <canvas> este doar un container pentru grafică. Pentru a desena grafică trebuie să utilizați JavaScript.
Canvas are mai multe metode pentru a desena căi, cutii, cercuri, text și adăugarea de imagini.
 Specificați întotdeauna un atribut id (la care se face referire într-un script) și un atribut lățime și înălțime (width și height) pentru a defini dimensiunea pânzei (canvas). Pentru a adăuga un chenar (border), utilizați atributul stil (style).
 

HTML5 Web Workers

Un lucrător web este un JavaScript care rulează în fundal, fără a afecta performanța paginii.
Când executați scripturi într-o pagină HTML, pagina nu răspunde până la finalizarea scriptului.
Un lucrător web (web worker) este un JavaScript care rulează în fundal, independent de alte scripturi, fără a afecta performanța paginii. Puteți continua să faceți orice doriți: făcând click, selectând lucruri etc., în timp ce lucrătorul web (web worker) rulează în fundal.
Înainte de a crea un lucrător web (web worker), verificați dacă browserul utilizatorului îl acceptă.
Creați un fișier Web Worker.
Creăm lucrătorul nostru web (web worker) într-un JavaScript extern.
Creem un script care contează. Scriptul este stocat în fișierul "demo_workers.js".
Apoi putem trimite și primi mesaje de la lucrătorul web (web worker).
Adăugați un ascultător de eveniment „onmessage” la lucrătorul web (web worker).
Când lucrătorul web (web worker) postează un mesaj, codul din ascultătorul evenimentului este executat. Datele de la lucrătorul web (web worker) sunt stocate în event.data.
Încheiați un lucrător web (web worker).
Când se creează un obiect de lucru web(web worker), acesta va continua să asculte mesajele (chiar și după terminarea scriptului extern) până la încheierea acestuia.
Pentru a încheia un lucrător web (web worker) și a resurselor gratuite pentru browser / computer, utilizați metoda terminare ().
Reutilizați Web Worker.
Dacă setați variabila lucrător (worker) pe nedeterminată, după terminarea acesteia, puteți refolosi codul.
Întrucât lucrătorii web (web workers) se află în fișiere externe, aceștia nu au acces la următoarele obiecte JavaScript:
Obiectul ferestrei.
Obiectul documentului.
Obiectul părinte.

CSS Introducere

CSS este un limbaj care descrie stilul unui document HTML.
CSS descrie modul în care trebuie afișate elementele HTML.
CSS reprezintă Cascading Style Sheets.
CSS descrie modul în care elementele HTML trebuie să fie afișate pe ecran, pe hârtie sau în alte suporturi.
CSS economisește multă muncă. Poate controla aspectul mai multor pagini web simultan.
Fișele de stil externe (external stylesheets) sunt stocate în fișiere CSS.
CSS este utilizat pentru a defini stiluri pentru paginile dvs. web, inclusiv designul, aspectul și variațiile de afișare pentru diferite dispozitive și dimensiuni de ecran.
HTML nu a fost niciodată destinat să conțină etichete pentru formatarea unei pagini web!
HTML a fost creat pentru a descrie conținutul unei pagini web.
Când etichete ca <font> și atribute de culoare au fost adăugate la specificația HTML 3.2, a început un coșmar pentru dezvoltatorii web. Dezvoltarea de site-uri web mari, unde fonturile și informațiile despre culoare erau adăugate la fiecare pagină, a devenit un proces lung și scump.
Pentru a rezolva această problemă, World Wide Web Consortium (W3C) a creat CSS.
Definițiile de stil sunt salvate în mod normal în fișiere .css externe.
Cu un fișier de foi de stil externe (external stylesheet file), puteți schimba aspectul unui întreg site web schimbând doar un singur fișier!

CSS Fonturi

Proprietățiile fontului CSS definesc font family, boldness, size și style of a text.
Familii de fonturi CSS (CSS Font Families).
În CSS, există două tipuri de nume de fonturi:
generic family - un grup de familii de fonturi cu aspect similar (cum ar fi „Serif” sau „Monospace”).
font family - o familie de fonturi specifică (cum ar fi „Times New Roman” sau „Arial”).
Font Family.
Familia de fonturi a unui text este setată cu proprietatea font-family.
Proprietatea font-family ar trebui să dețină mai multe nume de font ca sistem „fallback”. Dacă browserul nu acceptă primul font, încearcă următorul font și așa mai departe.
Începeți cu fontul dorit și terminați cu o familie generică (generic family), pentru a permite browserului să aleagă un font similar în familia generică (generic family), dacă nu sunt disponibile alte fonturi.
Dacă numele unei familii de fonturi este mai mult de un cuvânt, acesta trebuie să fie între ghilimele, cum ar fi: „Times New Roman”.
Mai multe familii de fonturi sunt specificate într-o listă separată de virgule.
Stilul fontului (Font Style)
Proprietatea font-style este utilizată mai ales pentru a specifica textul italic.
Această proprietate are trei valori:
normal - Textul este afișat normal.
italic - Textul este afișat cu caractere italice.
oblique - Textul este „aplecat” (oblic este foarte similar cu italic, dar mai puțin susținut).
Proprietatea font-size stabilește dimensiunea textului.
Posibilitatea de a gestiona dimensiunea textului este importantă în proiectarea web. Cu toate acestea, nu ar trebui să utilizați ajustări de dimensiune a fontului pentru a face ca paragrafele să arate ca titluri sau rubricile să pară paragrafe.
Utilizați întotdeauna etichetele HTML adecvate, cum ar fi <h1> - <h6> pentru titluri și <p> pentru paragrafe.
Valoarea font-size poate fi o dimensiune absolută sau relativă.
Dimensiune absolută:
Setează textul la o dimensiune specificată.
Nu permite utilizatorului să modifice dimensiunea textului în toate browserele (greșit din motive de accesibilitate).
Dimensiunea absolută este utilă atunci când dimensiunea fizică a ieșirii este cunoscută.
Mărime relativă:
Setează dimensiunea în raport cu elementele din jur.
Permite unui utilizator să modifice dimensiunea textului în browsere.
Dacă nu specificați o dimensiune a fontului, dimensiunea implicită pentru textul normal, cum ar fi alineatele, este 16px (16px = 1em).
Setarea dimensiunii fontului cu pixeli.
Setarea dimensiunii textului cu pixeli vă oferă un control complet asupra dimensiunii textului.
Dacă utilizați pixeli, puteți utiliza în continuare zoom tool pentru a redimensiona întreaga pagină.
Setați dimensiunea fontului cu Em
Pentru a permite utilizatorilor să redimensioneze textul (în meniul browserului), mulți dezvoltatori folosesc em în loc de pixeli.
Unitatea de dimensiuni em este recomandată de W3C.
1em este egal cu dimensiunea curentă a fontului. Dimensiunea implicită a textului în browsere este 16px. Deci, dimensiunea implicită de 1em este 16px.
Mărimea poate fi calculată de la pixeli la em folosind această formulă: pixeli / 16 = em.
Font Weight
Proprietatea font-weight specifică greutatea unui font:
Responsive Font Size
Mărimea textului poate fi setată cu o unitate vw, ceea ce înseamnă „viewport width”.
Astfel dimensiunea textului va urma dimensiunea ferestrei browserului:
Font Variant
Proprietatea font-variant specifică dacă un text ar trebui să fie afișat sau nu într-un font cu caractere mici.
Într-un font cu caractere mici, toate literele mici sunt convertite în litere mari. Cu toate acestea, literele majuscule convertite apar cu o dimensiune de font mai mică decât literele majuscule originale din text.
font - Setează toate proprietățile fontului într-o singură declarație.
font-family - Specifică familia de fonturi pentru text.
font-size - Specifică dimensiunea fontului textului.
font-style - Specifică stilul de font pentru text.
font-variant - Specifică dacă un text trebuie să fie afișat sau nu într-un font cu caractere mici.
font-weight - Specifică greutatea unui font.

CSS Pseudo-elemente

Un pseudo-element CSS este utilizat pentru a stabili părțile specificate ale unui element.
De exemplu, poate fi folosit pentru:
Stilizarea primei litere sau linia unui element.
Inserarea de conținut înainte sau după, conținutul unui element.
Observați notația dublă colon - :: first-line versus :first-line
Dublul colon a înlocuit notația cu un singur colon pentru pseudo-elemente în CSS3. Aceasta a fost o încercare din partea W3C de a distinge pseudo-clasele și pseudo-elementele.
Sintaxa cu un singur colon a fost folosită atât pentru pseudo-clase, cât și pentru pseudo-elemente în CSS2 și CSS1.
Pseudo-element :: first-line este utilizat pentru a adăuga un stil special la prima linie a unui text.
Pseudo-elementul :: first-line poate fi aplicat numai elementelor la nivel de block.
Următoarele proprietăți se aplică pentru pseudo-element :: first-line: font properties, color properties, background properties, word-spacing, letter-spacing, text-decoration, vertical-align, text-transform, line-height, clear
Pseudo-elementul :: first-letter este utilizat pentru a adăuga un stil special la prima literă a unui text.
Pseudo-elementul :: first-letter poate fi aplicat numai elementelor la nivel de block.
Următoarele proprietăți se aplică pentru pseudo-elementul :: first-letter: font properties, color properties , background properties, margin properties, padding properties, border properties, text-decoration, vertical-align (only if "float" is "none"), text-transform, line-height, float, clear
Pseudo-elemente și clase CSS
Pseudo-elementele pot fi combinate cu clase CSS.
Pseudo-elemente multiple
Mai multe pseudo-elemente pot fi, de asemenea, combinate.
Pseudo-elementul ::before poate fi utilizat pentru a insera un anumit conținut înainte de conținutul unui element.
Pseudo-elementul ::after poate fi utilizat pentru a insera un anumit conținut după conținutul unui element.
Pseudo-element ::selection se potrivește cu porțiunea unui element selectat de un utilizator.
Următoarele proprietăți CSS pot fi aplicate la ::selection: culoare, fundal, cursor și contur (color, background, cursor, și outline).
Toate Pseudo-elementele CSS:
::after p ::after - Inserați ceva după conținutul fiecărui element <p>
::before p ::before - Introduceți ceva înainte de conținutul fiecărui element <p>
::first letter p ::first letter -  Selectează prima literă a fiecărui element <p>
::first-line p ::first-line - Selectează prima linie a fiecărui element <p>
::selection p ::selection - Selectează porțiunea unui element selectat de un utilizator
Toate Pseudo-clasele CSS:
:active a:active - Selectează legătura activă
:checked :input checked - Selectează fiecare element <input> bifat
:disabled :input disabled - Selectează fiecare element dezactivat <input>
:empty p:empty - Selectează fiecare element <p> care nu are copii
:enabled input:enabled - Selectează fiecare element activat <input>
:first-child p:first-child  - Selectează toate elementele <p> care este primul copil al părintelui său
:first-of-type p:first-of-type - Selectează fiecare element <p> care este primul element <p> al părintelui său
:focus input:focus - Selectează elementul <input> care are focus
:hover a:hover - Selectează linkurile peste mouse
:in-range input:in-range - Selectează elementele <input> cu o valoare dintr-un interval specificat
:invalid :input invalid - Selectează toate elementele <input> cu o valoare nevalidă
:lang(language)    p:lang(it) -  Selectează fiecare element <p> cu o valoare a atributului lang începând cu „it”
:last-child    p:last-child - Selectează toate elementele <p> care este ultimul copil al părintelui său
:last-of-type    p:last-of-type - Selectează fiecare element <p> care este ultimul element <p> al părintelui său
:link a:link - Selectează toate linkurile nevizitate
:not (selector) :not (p) - Selectează fiecare element care nu este un element <p>
:nth-child (n) p:nth-child (2) - Selectează fiecare element <p> care este al doilea copil al părintelui său
:nth-last-child (n) p:nth-last-child (2) - Selectează fiecare element <p> care este al doilea copil al părintelui său, numărând de la ultimul copil
:nth-last-of-type (n) p:nth-last-of-type (2) - Selectează fiecare element <p> care este al doilea element <p> al părintelui său, numărând de la ultimul copil
:nth-of-type (n) p:nth-of-type (2) - Selectează fiecare element <p> care este al doilea element <p> al părintelui său
:only-of-type p:only-of-type - Selectează fiecare element <p> care este singurul element <p> al părintelui său
:only-child p:only-child - Selectează fiecare element <p> care este singurul copil al părintelui său
:optional  input:optional - Selectează elementele <input> fără atribut "necesar"
:out-of-range    input:out-of-range - Selectează elementele <input> cu o valoare în afara unui interval specificat
:read-only  input:read-only - Selectează elementele <input> cu atributul „readonly” specificat
:read-write input:read-write - Selectează elementele <input> fără atribut "readonly"
:required  input:required - Selectează elementele <input> cu atributul „necesar” specificat
:root root - Selectează elementul rădăcină al documentului
:target #news:target - Selectează elementul #news activ curent (faceți clic pe o adresă URL care conține numele ancorării)
:valid  input:valid - Selectează toate elementele <input> cu o valoare valabilă
:visited  a:visited - Selectează toate linkurile vizitate

CSS Contoare

Contoare CSS
Contoarele CSS sunt „variabile” menținute de CSS ale căror valori pot fi incrementate prin reguli CSS (pentru a urmări de câte ori sunt utilizate). Contoarele vă permit să ajustați aspectul conținutului în funcție de plasarea acestuia în document.
Numerotare automată cu contoare
Contoarele CSS sunt ca „variabile”. Valorile variabilei pot fi incrementate prin reguli CSS (care vor urmări de câte ori sunt utilizate).
Pentru a lucra cu contoarele CSS vom folosi următoarele proprietăți:
counter-reset - Creează sau resetează un contor
counter-increment - Crește o valoare a contorului
content - Inserează conținut generat
counter() or counters() function - Adăugă valoarea unui contor la un element
Pentru a utiliza un contor CSS, acesta trebuie mai întâi creat cu counter-reset.
Creează un contor pentru pagină (în selectorul body), apoi crește valoarea contorului pentru fiecare element <h2> și adaugă "Secțiunea <valoarea contorului>:" la începutul fiecărui element <h2>.
Nesting Counters
Creează un contor pentru pagină (section) și un contor pentru fiecare element <h1> (subsection). Contorul „section” va fi contorizat pentru fiecare element <h1> cu „secțiunea <valoarea secțiunii contorului>.”, Iar contorul „subsection” va fi contorizat pentru fiecare element <h2> cu „<valoarea contorului de secțiuni >. <valoarea contorului de subsecțiuni> ".
Un contor poate fi de asemenea util pentru a crea liste conturate, deoarece o nouă instanță a unui contor este creată automat în elementele copil. Folosim funcția counters()  pentru a insera o șir între diferitele niveluri de nested counters.

Proprietăți ale contorului CSS
content - Folosit cu pseudo-elementele ::before și ::after, pentru a insera conținut generat
counter-increment - Crește una sau mai multe valori ale contorului
counter-reset - Creează sau resetează unul sau mai multe contoare

CSS Website Layout

Website Layout
Un site web este adesea împărțit în anteturi, meniuri, conținut și un subsol(headers, menus, content și footer).
Antet (Header)
Un antet este de obicei situat în partea de sus a site-ului web (sau chiar sub un meniu de navigare de sus). Adesea conține un logo sau numele site-ului.
Bară de navigare (Navigation Bar)
O bară de navigare conține o listă de link-uri pentru a ajuta vizitatorii care navighează pe site-ul dvs. web.
Conţinut (Content)
Aspectul din această secțiune depinde adesea de utilizatorii vizați. Cea mai comună dispunere este una (sau combinarea lor) dintre următoarele:
1-column - (adesea folosit pentru browserele mobile)
2-column - (adesea folosit pentru tablete și laptopuri)
3-column layout  - (utilizată doar pentru desktopuri)
Coloane inegale (Unequal Columns)
Conținutul principal este cea mai mare și cea mai importantă parte a site-ului dvs.
Este comună cu lățimile inegale ale coloanei, astfel încât cea mai mare parte a spațiului este rezervată conținutului principal. Conținutul lateral (dacă există) este adesea folosit ca o navigare alternativă sau pentru a specifica informații relevante pentru conținutul principal. Modificați lățimile după cum doriți, amintiți-vă doar că ar trebui să adauge până la 100% în total.
Subsol (Footer)
Subsolul este plasat în partea de jos a paginii. Adesea conține informații precum copyright și informații de contact.
Responsive Website Layout
Folosind o parte din codul CSS de mai sus, putem crea un site web responsiv, care variază între două coloane și coloane cu lățime completă, în funcție de lățimea ecranului.

CSS Fundaluri multiple

În acest capitol veți învăța cum să adăugați mai multe imagini de fundal la un element.
Proprietățiile background-size, background-origin, background-clip.
CSS vă permite să adăugați mai multe imagini de fundal pentru un element, prin proprietatea background-image.
Diferitele imagini de fundal sunt separate prin virgule, iar imaginile sunt stivuite una peste alta, unde prima imagine este cea mai apropiată de privitor.
Mai multe imagini de fundal pot fi specificate utilizând fie proprietățiile de fundal individuale (ca mai sus), fie proprietatea background shorthand.
CSS Background Size
Proprietatea CSS background-size vă permite să specificați dimensiunea imaginilor de fundal.
Mărimea poate fi specificată în lungimi, procente (lengths, percentages) sau utilizând unul dintre cele două cuvinte cheie: conține sau acoperire(contain sau cover).
Redimensionare background image la o dimensiune mult mai mică decât imaginea originală (folosind pixeli).
Celelalte două valori posibile pentru background-size sunt contain și cover.
Cuvântul cheie contain scalează imaginea de fundal (scales the background image) pentru a fi cât mai mare (dar atât lățimea cât și înălțimea sa trebuie să se încadreze în zona conținutului). Ca atare, în funcție de proporțiile imaginii de fundal (background image) și de zona de poziționare a fundalului, pot exista anumite zone ale fundalului care nu sunt acoperite de imaginea de fundal (background image).
Cuvântul cheie cover scalează imaginea de fundal (scales the background image) astfel încât zona de conținut să fie acoperită complet de imaginea de fundal (background image) (atât lățimea cât și înălțimea acesteia sunt egale sau depășesc aria conținutului). Ca atare, este posibil ca unele părți ale imaginii de fundal (background image) să nu fie vizibile în zona de poziționare a fundalului.
Definirea dimensiunilor mai multor imagini de fundal (Define Sizes of Multiple Background Images)
Proprietatea background-size acceptă, de asemenea, mai multe valori pentru dimensiunea fundalului (folosind o listă separată de virgule), atunci când lucrați cu mai multe fundaluri.
Full Size Background Image
Acum vrem să avem o imagine de fundal (background image) pe un site web care să acopere întreaga fereastră a browserului în orice moment.
Cerințele sunt următoarele:
Completează întreaga pagină cu imaginea (fără spațiu alb).
Scalați imaginea după caz.
Centrați imaginea pe pagina.
Nu provocați bare de defilare (scrollbars).
Hero Image
De asemenea, puteți utiliza diferite proprietăți de fundal (background) pe un <div> pentru a crea hero image (o imagine mare cu text) și să o plasați acolo unde doriți.
Proprietatea CSS background-origin
Proprietatea CSS background-origin specifică unde este poziționată imaginea de fundal.
Proprietatea are trei valori diferite:
border-box - imaginea de fundal pornește din colțul din stânga sus al border-ului.
padding-box - (implicit) imaginea de fundal pornește din colțul din stânga sus al marginii padding-ului.
content-box - imaginea de fundal pornește din colțul din stânga sus al conținutului.
Proprietatea CSS background-clip
Proprietatea CSS background-clip specifică zona de pictură a fundalului.
Proprietatea are trei valori diferite:
border-box - (implicit) fundalul este pictat pe marginea exterioară a border-ului.
padding-box - fundalul este vopsit până la marginea exterioară a padding-ului.
content-box - fundalul este pictat în caseta de conținut.
Proprietăți CSS background avansate:
background - O proprietate shorthand pentru setarea tuturor proprietăților de fundal într-o singură declarație
background-clip - Specifică zona de pictură a fundalului
background-image - Specifică una sau mai multe imagini de fundal pentru un element
background-origin - Specifică unde este / sunt poziționate imaginile de fundal
background-size - Specifică dimensiunea imaginii de fundal

CSS Paginare

CSS Paginare
Aflați cum puteți crea o paginare responsive folosind CSS.
Paginare simplă
Dacă aveți un site web cu o mulțime de pagini, poate doriți să adăugați un fel de paginare la fiecare pagină.
Paginarea activă și hoverable
Evidențiați pagina curentă cu o clasă .active și folosiți selectorul :hover pentru a schimba culoarea fiecărei linii de pagină atunci când deplasați mouse-ul peste ele.
Butoane rotunjite active și hoverable
Dacă doriți un buton rotund „active” și „hover” adăugați proprietatea border-radius.
Efect de tranziție hoverable (Hoverable Transition Effect)
Adăugați proprietatea transition la link-urile paginii pentru a crea un efect de tranziție în timpul trecerii (hover).
Paginare mărginită (Bordered Pagination)
Utilizați proprietatea border pentru a adăuga borduri la paginație.
Margini rotunjite (Rounded Borders)
Adăugați rounded borders la prima și ultima dvs. legătură (link) din paginare.
Spațiu între legături (Space Between Links)
Adăugați proprietatea margin dacă nu doriți să grupați linkurile paginii.
Mărimea paginării (Pagination Size)
Modificați dimensiunea paginării cu proprietatea font-size.
Paginarea centrată (Centered Pagination)
Pentru a centra paginarea, wrap un element de tip container (cum ar fi <div>) în jurul lui cu text-align:center
Paginare Breadcrumbs
O altă variantă a paginării este așa-numita "breadcrumbs"

CSS Variabile

Variabile CSS
Proprietăți CSS personalizate (variabile)
Funcția var() poate fi utilizată pentru a insera valoarea unei proprietăți personalizate.
Asistență browser (Browser Support)
Numerele din tabel specifică prima versiune a browserului care acceptă integral proprietatea.
Funcția var()
Variabilele din CSS ar trebui declarate în cadrul unui selector CSS care definește domeniul său de aplicare. Pentru un domeniu global, puteți utiliza fie :root sau selectorul body.
Numele variabilei trebuie să înceapă cu două liniuțe (--) și este sensibil la litere mari și mici!
custom-name - Obligatoriu. Numele proprietății personalizate (trebuie să înceapă cu două liniuțe).
value - Opțional. Valoarea de retragere (folosită dacă proprietatea personalizată este nevalidă).
Definire proprietate personalizată globală numită  "--main-bg-color", apoi folosire funcția var() pentru a insera valoarea proprietății personalizate ulterior în foaia de stil (style sheet):
CSS Funcția var()
var () - Inserează valoarea unei proprietăți custom

CSS Flexbox

CSS Flexbox
CSS Modulul Flexbox Layout (CSS Flexbox Layout Module)
Înainte de modulul Layout Flexbox, existau patru moduri de aspect:
Block, pentru secțiunile dintr-o pagină web
Inline, pentru text
Table, pentru date în două dimensiuni ale tabelului
Positioned, pentru poziția explicită a unui element
Flexible Box Layout Module, face mai ușoară proiectarea unei structuri flexibile layout responsive fără a folosi float sau poziționare (positioning).
Asistență browser(Browser Support)
Proprietățilie flexbox sunt acceptate în toate browserele moderne.
Elemente Flexbox (Flexbox Elements)
Pentru a începe să utilizați modelul Flexbox, trebuie să definiți mai întâi un recipient flex (flex container).
Elementul de mai sus reprezintă un recipient flex (flex container) (zona albastră) cu trei elemente flexibile.
Un container flex cu trei articole flexibile.
O dispunere flexibilă (Flexible Layout) trebuie să aibă un element părinte cu proprietatea de afișare setată la flex.
Elementele directe ale copilului ale containerului flexibil devin automat elemente flexibile.
Proprietățiile containerului flex sunt: flex-direction, flex-wrap, flex-flow, justify-content, align-items, align-content.
Proprietatea flex-direction
Proprietatea flex-direction definește în ce direcție containerul dorește să stiveze elementele flex.
 "flex-direction: column;" stivuiește elementele flexate vertical (de sus în jos).
Valoarea coloanei (column) stochează vertical elementele flex (de sus în jos).
Valoarea coloană-inversă (column-reverse) stochează vertical elementele flex (dar de jos în sus).
Valoarea row-reverse stochează elementele flexate pe orizontală (dar de la dreapta la stânga).
Proprietatea flex-wrap specifică dacă elementele flex trebuie să fie wrap sau nu.
Valoarea wrap specifică faptul că elementele flex se vor wrap dacă este necesar.
Valoarea nowrap specifică faptul că elementele flex nu se vor wrap (aceasta este implicită).
Valoarea wrap-reverse specifică faptul că elementele flexibile se vor wrap dacă este necesar, în ordine inversă.
Proprietatea flex-flow este o proprietate shorthand pentru setarea proprietăților flex-direction și flex-wrap.
Proprietatea justify-content este utilizată pentru alinierea elementelor flex
Valoarea center aliniază elementele flex în centrul containerului
Valoarea flex-start aliniază elementele flex la începutul containerului (implicit)
Valoarea flex-end aliniază elementele flex la sfârșitul containerului
Valoarea space-around afișează elementele flex cu spațiu înainte, între și după linii (before, between și after)
Valoarea space-between afișează elementele flexibile cu spațiu între linii
Proprietatea align-items este utilizată pentru alinierea elementelor flexate pe verticală.
Utilizăm un container înalt de 200 de pixeli, pentru a demonstra mai bine proprietatea align-items.
Valoarea center aliniază elementele flex din mijlocul containerului.
Valoarea flex-start aliniază elementele flex din partea de sus a containerului.
Valoarea flex-end aliniază elementele flex din partea de jos a containerului.
Valoarea stretch întinde elementele flex pentru a umple containerul (aceasta este implicit).
Valoarea baseline aliniază elementele flex, cum ar fi alinierea lor de bază.
Proprietatea align-content este utilizată pentru a alinia liniile flex.
În aceste exemple, utilizăm un container înalt de 600 de pixeli, cu proprietatea flex-wrap setată pentru a wrapa, pentru a demonstra mai bine proprietatea align-content.
Valoarea space-between afișează liniile flexate cu spațiu egal între ele.
Valoarea space-around afișează liniile flexate cu spațiu înainte, între și după ele.
Valoarea stretch întinde liniile flex pentru a ocupa spațiul rămas (acesta este implicit).
Valoarea center afișează liniile de flexare din mijlocul containerului.
Valoarea flex-start afișează liniile flex la începutul containerului.
Valoarea flex-end afișează liniile de flex la sfârșitul containerului.
Centrare perfectă
În următorul exemplu, vom rezolva o problemă de stil foarte comună: centrarea perfectă (perfect centering).
Setați atât proprietățiile justify-content, cât și align-items in centru, iar elementul flex va fi perfect centrat.
Child Elements (Items)
Elementele child directe ale unui recipient flex devin automat elemente flexibile (flexibile).
Proprietățiile elementului flex: order, flex-grow, flex-shrink, flex-basis, flex, align-self.
Proprietatea order specifică ordinea elementelor flex.
Primul element flex din cod nu trebuie să apară ca primul element din layout.
Valoarea order trebuie să fie un număr, valoarea implicită este 0.
Proprietatea order poate modifica ordinea articolelor flex.
Proprietatea flex-grow specifică cât de mult va crește un element flex în raport cu restul elementelor flex.
Valoarea flex-grow trebuie să fie un număr, valoarea implicită este 0.
Faceți ca cel de-al treilea element flex să crească de opt ori mai rapid decât celelalte elemente flex.
Proprietatea flex-shrink specifică cât de mult se va micsora un element flex în raport cu restul elementelor flex.
Valoarea flex-shrink trebuie să fie un număr, valoarea implicită este 1.
Nu lăsați al treilea element flex să se micșoreze la fel de mult decât celelalte elemente flex.
Proprietatea flex-basis specifică lungimea inițială a unui element flex.
Proprietatea flex este o proprietate shorthand pentru proprietățiile flex-grow, flex-shrink și flex-basis.
Proprietatea align-self specifică alinierea pentru elementul selectat în interiorul containerului flexibil.
Proprietatea align-self înlocuiește alinierea setată implicit de proprietatea align-items a containerului.
Galerie de imagini responsive folosind Flexbox
Utilizați flexbox pentru a crea o galerie de imagini responsive care variază între patru, două sau imagini cu lățime completă, în funcție de dimensiunea ecranului.
Website responsive folosind Flexbox
Utilizați flexbox pentru a crea un responsive website, care conține o bară de navigare flexibilă și conținut flexibil.
Proprietăți CSS Flexbox
display - Specifică tipul de box folosit pentru un element HTML
flex-direction - Specifică direcția articolelor flexibile din interiorul unui recipient flex
justify-content - Aliniază orizontal elementele flex atunci când elementele nu folosesc tot spațiul disponibil pe axa principală
align-items - Aliniază vertical elementele flex atunci când elementele nu folosesc tot spațiul disponibil pe axa transversală
flex-wrap - Specifică dacă elementele flexate trebuie să se înfășoare (wrap) sau nu, dacă nu există suficient loc pentru ele pe o singură linie flex
align-content - Modifică comportamentul proprietății flex-wrap. Este similar cu align-items, dar în loc să alinieze elementele flex, aliniază liniile flex
flex-flow - O proprietate shorthand pentru flex-direction și flex-wrap
order - Specifică ordinea unui articol flexibil în raport cu restul elementelor flexibile din interiorul aceluiași recipient
align-self - Folosit pe articolele flex. Înlocuiește proprietatea align-items
flex - O proprietate shorthand pentru proprietățile flex-grow, flex-shrink și flex-basis

CSS Interogări media - Exemple

Interogări media CSS - exemple
Interogările media sunt o tehnică populară pentru livrarea unei foi de stil adaptate diferitelor dispozitive. Pentru a demonstra un exemplu simplu, putem schimba culoarea de fundal pentru diferite dispozitive.
Interogări media pentru meniuri
În acest exemplu, folosim interogări media pentru a crea un meniu de navigare responsive, care variază în ceea ce privește designul pe diferite dimensiuni de ecran.
Interogări media pentru coloane
O utilizare obișnuită a interogărilor media este de a crea un aspect flexibil (flexible layout). În acest exemplu, creem un aspect (layout) care variază între patru, două și full-width coloane, în funcție de diferitele dimensiuni ale ecranului.
Un mod mai modern de a crea column layouts este să folosiți CSS Flexbox. Cu toate acestea, nu este acceptat în Internet Explorer 10 și versiunile anterioare. Dacă aveți nevoie de asistență IE6-10, folosiți floats.
Ascundeți elementele cu interogări media
O altă utilizare obișnuită a interogărilor media este de a ascunde elemente pe diferite dimensiuni ale ecranului.
Modificați dimensiunea fontului cu interogări media
De asemenea, puteți utiliza interogări media pentru a modifica dimensiunea fontului (font size) unui element pe diferite dimensiuni ale ecranului.
Galerie de imagini flexibile
Folosim interogări media împreună cu flexbox pentru a crea o galerie de imagini responsive.
Site web flexibil
Utilizăm interogări media împreună cu flexbox pentru a crea un site web responsive, care conține o bară de navigare flexibilă și conținut flexibil.
Orientare: Portret / Peisaj
Interogările media pot fi, de asemenea, utilizate pentru a schimba aspectul (layout) unei pagini, în funcție de orientarea browserului.
Puteți avea un set de proprietăți CSS care se vor aplica numai atunci când fereastra browserului este mai largă decât înălțimea sa, o așa-numită orientare „Peisaj” (Landscape):
Utilizați o culoare de fundal lightblue (background color) dacă orientarea este în modul peisaj (landscape):
Folosind o valoare suplimentară: adăugăm o interogare media suplimentară la cea existentă folosind virgulă (aceasta se va comporta ca un operator OR).

CSS Responsive Web Design - Viewport

Responsive Web Design - Viewport
Ce este Viewport?
Viewport este zona vizibilă a utilizatorului unei pagini web.
Viewportul variază în funcție de dispozitiv și va fi mai mic pe un telefon mobil decât pe un ecran al computerului.
Înainte de tablete și telefoane mobile, paginile web erau concepute doar pentru ecranele computerului și era comun ca paginile web să aibă un design static și o dimensiune fixă.
Apoi, când am început să navigăm pe internet folosind tablete și telefoane mobile, paginile web cu dimensiuni fixe erau prea mari pentru a se potrivi cu ecranul. Pentru a remedia acest lucru, browserele de pe aceste dispozitive au redus întreaga pagină web pentru a se potrivi ecranului.
Nu a fost perfect !! Dar o rezolvare rapidă.
Setarea Viewport
HTML5 a introdus o metodă pentru a permite proiectanților web să preia controlul asupra viewport-ului, prin intermediul etichetei <meta>.
Ar trebui să includeți următorul element viewport <meta> în toate paginile dvs. web.
Un element viewport <meta> oferă instrucțiuni browserului cu privire la modul de control al dimensiunilor și scalării paginii.
width=device-width part stabilește lățimea paginii pentru a urma lățimea ecranului dispozitivului (screen-width) (care va varia în funcție de dispozitiv).
initial-scale=1.0 setează nivelul inițial de zoom atunci când pagina este încărcată prima dată de browser.
Iată un exemplu de pagină web fără viewport meta tag și aceeași pagină web cu viewport meta tag.
Mărimea conținutului la Viewport (Size Content to The Viewport)
Utilizatorii sunt folosiți pentru a derula site-urile pe verticală atât pe desktop cât și pe dispozitive mobile - dar nu pe orizontală!
Așadar, dacă utilizatorul este obligat să defileze orizontal sau să mărească, pentru a vedea întreaga pagină web, rezultă o experiență slabă a utilizatorului.
Câteva reguli suplimentare de urmat:
NU folosiți elemente cu lățime fixă ​​mare - De exemplu, dacă o imagine este afișată la o lățime mai largă decât cea din portofoliu, aceasta poate determina derularea portofoliului pe orizontală. Nu uitați să ajustați acest conținut pentru a se încadra în lățimea vizualizării.
NU lăsați conținutul să se bazeze pe o anumită lățime a viewportului (viewport width) pentru a fi redat - Deoarece dimensiunile ecranului și lățimea în pixeli CSS variază foarte mult între dispozitive, conținutul nu ar trebui să se bazeze pe o anumită lățime a viewportului pentru a fi redat.
Utilizați interogări CSS media (media queries) pentru a aplica stiluri diferite pentru ecrane mici și mari - Setarea lățimilor CSS mari pentru elementele paginii va face ca elementul să fie prea larg pentru viewport de pe un dispozitiv mai mic. În schimb, luați în considerare utilizarea unor valori de lățime relative, cum ar fi lățimea: 100%. De asemenea, aveți grijă să folosiți valori mari de poziționare absolută. Poate determina elementul să iasă în afara ecranului pe dispozitive mici.

SQL CREATE INDEX

SQL CREATE INDEX
Instrucțiunea SQL CREATE INDEX
Instrucțiunea CREATE INDEX este utilizată pentru a crea indexuri în tabele.
Se folosesc indexuri pentru a prelua date din baza de date mai rapid decât in caz contrar. Utilizatorii nu pot vedea indexurile, ci sunt folosite doar pentru a accelera căutările / interogările (searches/queries).
Actualizarea unei tabele cu indexuri necesită mai mult timp decât actualizarea unui tabel fără indexuri (deoarece indexurile au nevoie și de o actualizare). Deci, creați doar indexuri pe coloane care vor fi căutate frecvent.
Sintaxă CREATE INDEX
Creează un index într-un tabel. Valorile duplicate sunt permise:
CREATE INDEX index_name
ON table_name (column1, column2, ...);
Sintaxă  CREATE UNIQUE INDEX 
Creează un index unic pe un tabel. Valorile duplicate nu sunt permise:
CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...);
Sintaxa pentru crearea indexurilor variază printre diferite baze de date. Prin urmare: verificați sintaxa pentru a crea indexuri în baza de date.
Exemplu CREATE INDEX
Instrucțiunea SQL de mai jos creează un index numit "idx_lastname" în coloana "LastName" din tabelul "Persoane" (Persons):
CREATE INDEX idx_lastname
ON Persons (LastName);
Dacă doriți să creați un index pe o combinație de coloane, puteți lista numele coloanelor din paranteze, separate prin virgule:
CREATE INDEX idx_pname
ON Persons (LastName, FirstName);
Declarație DROP INDEX (DROP INDEX Statement)
Instrucțiunea DROP INDEX este utilizată pentru a șterge un index dintr-un tabel.
MS Access:
DROP INDEX index_name ON table_name;
SQL Server:
DROP INDEX table_name.index_name;
DB2/Oracle:
DROP INDEX index_name;
MySQL:
ALTER TABLE table_name
DROP INDEX index_name;

SQL Injection

Injecția SQL (SQL Injection)
Injecția SQL (SQL Injection) este o tehnică de injecție de cod (code injection) care ar putea distruge baza de date.
Injecția SQL (SQL Injection) este una dintre cele mai frecvente tehnici de hacking web.
Injecția SQL (SQL Injection) este plasarea codului rău intenționat în declarațiile SQL, prin introducerea paginii web.
SQL în paginile web
Injecția SQL (SQL Injection) are loc de obicei atunci când ceri utilizatorului o introducere, cum ar fi numele său de utilizator / userid (username/userid), iar în loc de nume / id (name/id), utilizatorul vă oferă o declarație SQL pe care o veți rula în mod neștiut pe baza de date.
Uitați-vă la următorul exemplu care creează o instrucțiune SELECT adăugând o variabilă (txtUserId) la un șir selectat. Variabila este preluată din intrarea utilizatorului (getRequestString):
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
Restul acestui capitol descrie pericolele potențiale ale utilizării intrării utilizatorului în declarațiile SQL.
Injecția SQL pe baza 1 = 1 este întotdeauna adevărată
Privește din nou exemplul de mai sus. Scopul inițial al codului a fost crearea unei instrucțiuni SQL pentru a selecta un utilizator, cu un id de utilizator (user id) dat.
Dacă nu există nimic care să împiedice un utilizator să introducă o intrare „greșită” (wrong), utilizatorul poate introduce unele intrări „inteligente” (smart) ca aceasta:
UserId: 105 SAU 1 = 1
Apoi, instrucțiunea SQL va arăta astfel:
SELECT * FROM Users WHERE UserId = 105 OR 1=1;
SQL-ul de mai sus este valid și va întoarce TOATE (ALL) rândurile din tabelul „Utilizatori” (Users), deoarece OR 1 = 1 este întotdeauna TRUE.
Exemplul de mai sus pare periculos? Ce se întâmplă dacă tabelul „Utilizatori” (Users) conține nume și parole?
Instrucțiunea SQL de mai sus este la fel ca aceasta:
SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1;
Un hacker ar putea avea acces la toate numele de utilizator și parolele (user names și passwords) dintr-o bază de date, introducând pur și simplu 105 OR 1 = 1 în câmpul de introducere.
Injecția SQL Bazată pe "" = "" este întotdeauna adevărată
Iată un exemplu de autentificare a utilizatorului pe un site web:
Nume utilizator: John Doe
Parola: myPass
Exemplu:
uName = getRequestString("username");
uPass = getRequestString("userpassword");
sql = 'SELECT * FROM Users WHERE Name ="' + uName + '" AND Pass ="' + uPass + '"'
Rezultat:
SELECT * FROM Users WHERE Name ="John Doe" AND Pass ="myPass"
Un hacker ar putea avea acces la numele de utilizator și parolele (user names și passwords) dintr-o bază de date, introducând pur și simplu "OR" "=" în caseta de text a numelui de utilizator sau a parolei (user name sau password):
Nume utilizator: "sau" "="
Parola: "sau" "="
Codul de la server va crea o declarație SQL validă astfel:
Rezultat:
SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""=""
SQL de mai sus este valid și va returna toate rândurile din tabelul „Utilizatori” (Users), deoarece OR „„ = „„ este întotdeauna TRUE.
Injecție SQL bazată pe declarații SQL Batched (SQL Injection Based on Batched SQL Statements)
Majoritatea bazelor de date acceptă declarația SQL batched.
Un batch (lot) de instrucțiuni SQL este un grup de două sau mai multe instrucțiuni SQL, separate prin punct și virgulă.
Instrucțiunea SQL de mai jos va returna toate rândurile din tabelul „Utilizatori” (Users), apoi va șterge tabelul „Furnizori” (Suppliers).
SELECT * FROM Users; DROP TABLE Suppliers
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
User id: 105; DROP TABLE Suppliers
SELECT * FROM Users WHERE UserId = 105; DROP TABLE Suppliers;
Utilizați parametrii SQL pentru protecție
Pentru a proteja un site web de injecția SQL, puteți utiliza parametrii SQL.
Parametrii SQL sunt valori care sunt adăugate la o interogare SQL la momentul executării, într-o manieră controlată.
Exemplu Razor ASP.NET:
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = @0";
db.Execute(txtSQL,txtUserId);
Rețineți că parametrii sunt reprezentați în instrucțiunea SQL de către un marker@.
Motorul SQL verifică fiecare parametru pentru a se asigura că este corect pentru coloana sa și sunt tratate literal, și nu ca parte a SQL-ului care trebuie executat.
txtNam = getRequestString("CustomerName");
txtAdd = getRequestString("Address");
txtCit = getRequestString("City");
txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)";
db.Execute(txtSQL,txtNam,txtAdd,txtCit);
Următoarele exemple arată cum să construiți interogări parametrizate în unele limbaje web comune.
SELECTAȚI DECLARAȚIA ÎN ASP.NET:
txtUserId = getRequestString("UserId");
sql = "SELECT * FROM Customers WHERE CustomerId = @0";
command = new SqlCommand(sql);
command.Parameters.AddWithValue("@0",txtUserID);
command.ExecuteReader();
INSERAȚI ÎN DECLARAȚIE ÎN ASP.NET:
txtNam = getRequestString("CustomerName");
txtAdd = getRequestString("Address");
txtCit = getRequestString("City");
txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)";
command = new SqlCommand(txtSQL);
command.Parameters.AddWithValue("@0",txtNam);
command.Parameters.AddWithValue("@1",txtAdd);
command.Parameters.AddWithValue("@2",txtCit);
command.ExecuteNonQuery();
INSERAȚI ÎN DECLARAȚIE ÎN PHP:
$stmt = $dbh->prepare("INSERT INTO Customers (CustomerName,Address,City)
VALUES (:nam, :add, :cit)");
$stmt->bindParam(':nam', $txtNam);
$stmt->bindParam(':add', $txtAdd);
$stmt->bindParam(':cit', $txtCit);
$stmt->execute();

PHP Sintaxă

Sintaxă PHP
Un script PHP este executat pe server, iar un simplu rezultat HTML este trimis înapoi în browser.
Sintaxa PHP de bază
Un script PHP poate fi plasat oriunde în document.
Un script PHP începe cu <?php și se termină cu?>:
<?php
// Codul PHP se introduce aici
?>
Extensia implicită pentru fișierele PHP este „.php”.
În mod normal, un fișier PHP conține etichete HTML și unele coduri de scripturi PHP (PHP scripting code).
Mai jos, avem un exemplu de fișier PHP simplu, cu un script PHP care folosește funcția PHP încorporată „echo” pentru a scoate textul „Hello World!” pe o pagină web:
Exemplu
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
Instrucțiunile PHP se termină cu punct și virgulă (;).
PHP Case Sensitivity
În PHP, NU există cuvinte cheie (de exemplu, if, else, while, echo etc.), clasele, funcțiile și funcțiile definite de utilizator (classes, functions, and user-defined functions) sunt case-sensitive.
În exemplul de mai jos, toate cele trei declarații echo sunt egale și legale:
<!DOCTYPE html>
<html>
<body>
<?php
ECHO "Hello World!<br>";
echo "Hello World!<br>";
EcHo "Hello World!<br>";
?>
</body>
</html>
Cu toate acestea; toate numele de variabile sunt case-sensitive!
Priviți exemplul de mai jos; numai prima declarație va afișa valoarea variabilei $color! Acest lucru se datorează faptului că $color, $COLOR și $coLOR sunt tratate ca trei variabile diferite:
<!DOCTYPE html>
<html>
<body>
<?php
$color = "red";
echo "Mașina mea este " . $color . "<br>";
echo "Casa mea este " . $COLOR . "<br>";
echo "Barca mea este " . $coLOR . "<br>";
?>
</body>
</html>

PHP Variabile

Variabile PHP
Variabilele sunt „containere” (containers) pentru stocarea informațiilor.
Crearea (declararea) variabilelor PHP
În PHP, o variabilă începe cu semnul $, urmată de numele variabilei:
<?php
$txt = "Hello world!";
$x = 5;
$y = 10.5;
?>
După executarea declarațiilor de mai sus, variabila $txt va păstra valoarea "Hello world!", variabila $x va deține valoarea 5, iar variabila $y va păstra valoarea 10.5.
Când atribuiți o valoare text unei variabile, puneți ghilimele în jurul valorii.
Spre deosebire de alte limbaje de programare, PHP nu are nicio comandă pentru declararea unei variabile. Este creat în momentul în care i-ați atribuit prima dată o valoare.
Gândiți-vă la variabile ca la containere pentru stocarea datelor (containers for storing data).
Variabile PHP
O variabilă poate avea un nume scurt (cum ar fi x și y) sau un nume mai descriptiv (age, carname, total_volum).
Reguli pentru variabilele PHP:
O variabilă începe cu semnul $, urmată de numele variabilei.
Un nume de variabilă trebuie să înceapă cu o literă sau un caracter de subliniere.
Un nume de variabilă nu poate începe cu un număr.
Un nume de variabilă nu poate conține decât caractere alfa-numerice și underscores (A-z, 0-9 și _).
Denumirile variabilelor sunt case-sensitive ($age și $AGE sunt două variabile diferite).
Amintiți-vă că numele variabilei PHP sunt case-sensitive!
Variabile de ieșire (Output Variables)
Declarația PHP echo este adesea folosită pentru a afișa (output) date pe ecran.
Afișare (output) text și o variabilă:
<?php
$txt = "lectii-virtuale.ro";
echo "Îmi place $txt!";
?>
Următorul exemplu va produce aceeași ieșire (output) ca exemplul de mai sus:
<?php
$txt = "lectii-virtuale.ro";
echo "Îmi place " . $txt . "!";
?>
Următorul exemplu va produce suma a două variabile:
<?php
$x = 5;
$y = 4;
echo $x + $y;
?>
PHP este un limbaj tiparit mai puțin
În exemplul precedent, observați că nu trebuie să îi spunem PHP-ului ce tip de dată (data type) este variabila.
PHP asociază automat un tip de date (data type) variabilei, în funcție de valoarea acesteia. Deoarece tipurile de date  (data types) nu sunt setate într-un sens strict, puteți face lucruri precum adăugarea unui șir la un număr întreg fără a provoca o eroare.
În PHP 7, au fost adăugate declarații de tip (type declarations). Aceasta oferă o opțiune de a specifica tipul de date (data type) preconizat la declararea unei funcții și, activând cerința strictă, va arunca o „eroare fatală” (Fatal Error) pe o nepotrivire de tip (type mismatch).
Veți afla mai multe despre cerințele stricte și non-stricte și declarațiile de tip de date din capitolul Funcții PHP.
Domeniul variabilelor PHP
În PHP, variabilele pot fi declarate oriunde în script.
Domeniul de aplicare al unei variabile este partea scriptului unde variabila poate fi referită / folosită (referenced/used).
PHP are trei domenii diferite de variabile : local, global, static.
Domeniul global și local
O variabilă declarată în afara unei funcții are un DOMENIU GLOBAL (GLOBAL SCOPE) și poate fi accesată numai în afara unei funcții:
Variabilă cu sfera globală:
<?php
$x = 5; // sfera globală
function myTest() {
    // folosirea x în interiorul acestei funcții va genera o eroare
    echo "<p>Variabila x în interiorul funcției este: $x</p>";
}
myTest();
echo "<p>Variabila x din exteriorul funcției este : $x</p>";
?>
O variabilă declarată în cadrul unei funcții are un SCOP LOCAL și poate fi accesată numai în cadrul acestei funcții:
Variabilă cu scop local:
<?php
function myTest() {
    $x = 5; // scop local
    echo "<p>Variabila x din interiorul funcției este: $x</p>";
}
myTest();
//  folosirea x în afara funcției va genera o eroare
echo "<p>Variabila x din afara funcției este: $x</p>";
?>
Puteți avea variabile locale cu același nume în funcții diferite, deoarece variabilele locale sunt recunoscute doar de funcția în care sunt declarate.
Cuvântul cheie global (global keyword) este utilizat pentru a accesa o variabilă globală dintr-o funcție.
Pentru a face acest lucru, utilizați înainte de variabile (în interiorul funcției) cuvântul cheie global (global keyword):
<?php
$x = 5;
$y = 10;
function myTest() {
    global $x, $y;
    $y = $x + $y;
}
myTest();
echo $y; // outputs 15 (15  ieșiri)
?>
PHP stochează de asemenea toate variabilele globale într-un tablou numit $GLOBALS [index]. Indicele conține numele variabilei. Acest tablou este de asemenea accesibil din funcții și poate fi utilizat pentru a actualiza direct variabilele globale.
Exemplul de mai sus poate fi rescris astfel:
<?php
$x = 5;
$y = 10;
function myTest() {
    $GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
myTest();
echo $y; // outputs 15 (15 ieșiri)
?>
PHP Cuvântul cheie static
În mod normal, când o funcție este finalizată / executată (completed/executed), toate variabilele sale sunt șterse. Cu toate acestea, uneori dorim ca o variabilă locală să NU fie ștearsă. Avem nevoie de asta pentru un alt job.
Pentru a face acest lucru, utilizați cuvântul cheie static (static keyword) când declarați pentru prima dată variabila:
<?php
function myTest() {
    static $x = 0;
    echo $x;
    $x++;
}
myTest();
myTest();
myTest();
?>
Apoi, de fiecare dată când se apelează funcția, acea variabilă va avea în continuare informațiile pe care le conține din ultima dată când a fost apelată funcția.
Pentru funcție, variabila este încă locală.

PHP echo și print

Declarații PHP echo și print 
Cu PHP, există două modalități de bază pentru a obține rezultate: echo și print.
În acest tutorial folosim echo sau print în aproape fiecare exemplu. 
Declarații PHP echo și print
echo și print sunt la fel mai mult sau mai puțin. Ambele sunt folosite pentru a emite date pe ecran.
Diferențele sunt mici: echo nu are o valoare returnată în timp ce print are o valoare returnată 1, astfel încât să poată fi folosită în expresii. echo poate lua mai mulți parametri (deși o astfel de utilizare este rară) în timp ce print poate lua un argument. echo este marginal mai rapid decât print.
Declarația echo PHP
Instrucțiunea echo poate fi folosită cu sau fără paranteze: echo sau echo().
Afișați textul
Următorul exemplu arată cum să afișați (output) text cu comanda echo (observați că textul poate conține marcaj HTML):
<?php
echo "<h2>PHP is Fun!</h2>";
echo "Hello world!<br>";
echo "Sunt pe cale să învăț PHP! <br>";
echo "Acest ", "string ", "a fost ", "făcut ", "cu mai mulți parametri.";
?>
Afișați variabile
Următorul exemplu arată cum să afișați (output) text și variabile cu declarația echo:
<?php
$txt1 = "Învățați PHP";
$txt2 = "lectii-virtuale.ro";
$x = 5;
$y = 4;
echo "<h2>" . $txt1 . "</h2>";
echo "Studiu PHP at " . $txt2 . "<br>";
echo $x + $y;
?>
Declarația PHP print
Instrucțiunea print poate fi folosită cu sau fără paranteze: print sau print().
Afișați textul
Următorul exemplu arată cum să afișați (output) text cu comanda print (observați că textul poate conține marcaj HTML):
<?php
print "<h2>PHP is Fun!</h2>";
print "Hello world!<br>";
print "Sunt pe cale să învăț PHP!";
?>
Afișați variabile
Următorul exemplu arată cum să afișați (output) text și variabile cu instrucțiunea print:
<?php
$txt1 = "Învățați PHP";
$txt2 = "W3Schools.com";
$x = 5;
$y = 4;
print "<h2>" . $txt1 . "</h2>";
print "Studiați PHP la " . $txt2 . "<br>";
print $x + $y;
?>

PHP Tipuri de date

Tipuri de date PHP(PHP Data Types)
Variabilele pot stoca date de diferite tipuri și diferite tipuri de date pot face lucruri diferite.
PHP acceptă următoarele tipuri de date: String, Integer, Float (floating point numbers - numit și dublu), Boolean, Array, Object, NULL, Resource.
PHP String
Un string este o secvență de caractere, cum ar fi „Hello world!”.
Un string poate fi orice text din ghilimele. Puteți utiliza ghilimele simple sau duble:
<?php
$x = "Hello world!";
$y = 'Hello world!';
echo $x;
echo "<br>";
echo $y;
?>
PHP Integer
Un tip de date întreg (integer data type) este un număr non-zecimal cuprins între -2 147.483.648 și 2.147.483.647.
Reguli pentru numere întregi (integers):
Un număr întreg (integer) trebuie să aibă cel puțin o cifră
Un număr întreg (integer) nu trebuie să aibă o zecimală
Un număr întreg (integer) poate fi pozitiv sau negativ
Numerele întregi (integers) pot fi specificate în: zecimal (baza 10), hexazecimal (baza 16), octal (baza 8) sau notare binară (baza 2)
În următorul exemplu $ x este un număr întreg (integer). Funcția PHP var_dump() returnează tipul (data type) și valoarea datelor:
<?php
$x = 5985;
var_dump($x);
?>
PHP Float
Un float (număr flotant) este un număr cu punct zecimal sau un număr în formă exponențială.
În exemplul următor $x este un float. Funcția PHP var_dump() returnează tipul (data type) și valoarea datelor:
<?php
$x = 10.365;
var_dump($x);
?>
PHP Boolean
Un boolean reprezintă două stări posibile: TRUE sau FALSE.
$x = true;
$y = false;
Booleans sunt adesea folosiți în testarea condiționată. Veți afla mai multe despre testarea condiționată într-un capitol ulterior al acestui tutorial.
PHP Array
Un array (tablou) stochează mai multe valori într-o singură variabilă.
În următorul exemplu $cars este un array (tablou) . Funcția PHP var_dump() returnează tipul (data type) și valoarea datelor:
<?php
$cars = array("Volvo","BMW","Toyota");
var_dump($cars);
?>
PHP Object
Un object (obiect) este un tip de date (data type) care stochează date și informații despre modul de procesare a acestor date.
În PHP, un object (obiect) trebuie declarat explicit.
Mai întâi trebuie să declaram o clasă de obiect (class of object). Pentru aceasta, folosim cuvântul cheie class (class keyword). O clasă (class) este o structură care poate conține proprietăți și metode:
<?php
class Car {
    function Car() {
        $this->model = "VW";
    }
}
// creați un obiect (object)
$herbie = new Car();
// arată proprietățiile obiectului (object)
echo $herbie->model;
?>
PHP NULL Value
Null este un tip de date special care poate avea o singură valoare: NULL.
O variabilă de tip de date (data type) NULL este o variabilă care nu are nicio valoare atribuită.
Dacă o variabilă este creată fără valoare, i se atribuie automat o valoare de NULL.
Variabilele pot fi de asemenea golite prin setarea valorii la NULL:
<?php
$x = "Hello world!";
$x = null;
var_dump($x);
?>
PHP Resource
Tipul resursei speciale nu este un tip de date (data type) real. Este stocarea unei referințe la funcții și resurse externe PHP.
Un exemplu obișnuit de utilizare a tipului de date resurse (resource data type) este un apel la baza de date.

PHP Numere

PHP Numbers
În acest capitol vom analiza în profunzime Integers, Floats și Number Strings.
Numere PHP
Un lucru de remarcat cu privire la PHP este că oferă conversie automată de tip de date (automatic data type conversion).
Deci, dacă atribuiți o valoare integer (valoare întreagă) unei variabile, tipul acelei variabile va fi automat un integer (număr întreg). Apoi, dacă atribuiți un string (șir) aceleiași variabile, tipul se va schimba la un string (șir).
Această conversie automată îți poate sparge codul.
PHP Integers
Un integer (număr întreg) este un număr fără nicio parte zecimală.
2, 256, -256, 10358, -179567 sunt integers (întregi). În timp ce 7.56, 10.0, 150.67 sunt floats.
Deci, un tip de date întreg (integer data type) este un număr non-zecimal cuprins între -2147483648 și 2147483647. O valoare mai mare (sau mai mică) decât aceasta, va fi stocată ca float, deoarece depășește limita unui integer (număr întreg).
Un alt lucru important de știut este că, chiar dacă 4*2,5 este 10, rezultatul este stocat sub formă de float, deoarece unul dintre operanzi este un float (2.5).
Iată câteva reguli pentru integers (numere întregi):
Un număr întreg (integer) trebuie să aibă cel puțin o cifră
Un număr întreg (integer) nu trebuie să aibă o zecimală
Un număr întreg (integer) poate fi pozitiv sau negativ
Numerele întregi pot fi specificate în trei formate: zecimale (baza 10), hexazecimale (baza 16 - prefix 0x) sau octale (baza 8 - prefix 0)
PHP are următoarele funcții pentru a verifica dacă tipul unei variabile este integer (întreg):
is_int()
is_integer() - alias of is_int()
is_long() - alias of is_int()
Verificați dacă tipul unei variabile este integer (întreg):
<?php
$x = 5985;
var_dump(is_int($x));
$x = 59.85;
var_dump(is_int($x));
?>
PHP Floats
Un float este un număr cu un punct zecimal sau un număr în formă exponențială.
2.0, 256.4, 10.358, 7.64E + 5, 5.56E-5 sunt toate floats.
Tipul de date (data type) float poate stoca de obicei o valoare de până la 1.7976931348623E + 308 (dependentă de platformă) și are o precizie maximă de 14 cifre.
PHP are următoarele funcții pentru a verifica dacă tipul unei variabile este float:
is_float()
is_double() - alias of is_float()
Verificați dacă tipul unei variabile este float:
<?php
$x = 10.365;
var_dump(is_float($x));
?>
PHP Infinity
O valoare numerică mai mare decât PHP_FLOAT_MAX este considerată infinită.
PHP are următoarele funcții pentru a verifica dacă o valoare numerică este finită sau infinită:
is_finite()
is_infinite()
Cu toate acestea, funcția PHP var_dump() returnează tipul (data type) și valoarea datelor:
Verificați dacă o valoare numerică este finită sau infinită:
<?php
$x = 1.9e411;
var_dump($x);
?>
PHP NaN
NaN semnifică Not Number.
NaN este utilizat pentru operații matematice imposibile.
PHP are următoarele funcții pentru a verifica dacă o valoare nu este un număr:
is_nan()
Cu toate acestea, funcția PHP var_dump() returnează tipul și valoarea datelor:Calculul invalid va returna o valoare NaN:
<?php
$x = acos(8);
var_dump($x);
?>
PHP Numerical Strings
Funcția PHP is_numeric() poate fi utilizată pentru a afla dacă o variabilă este numerică. Funcția returnează true dacă variabila este un număr sau un șir numeric, false altfel.
Verificați dacă variabila este numerică:
<?php
$x = 5985;
var_dump(is_numeric($x));
$x = "5985";
var_dump(is_numeric($x));
$x = "59.85" + 100;
var_dump(is_numeric($x));
$x = "Hello";
var_dump(is_numeric($x));
?>
De la PHP 7.0: Funcția is_numeric() va returna FALSE pentru șirurile numerice (numeric strings) în formă hexazecimală (de exemplu, 0xf4c3b00c), deoarece nu mai sunt considerate șiruri numerice (numeric strings).
PHP Casting Strings and Floats to Integers
Uneori, trebuie să convertiți o valoare numerică într-un alt tip de date (data type).
Funcția (int), (integer) sau intval() sunt adesea folosite pentru a converti o valoare (value) într-un număr întreg (integer).
Convertiți float și string la integer:
<?php
// Cast float to int
$x = 23465.768;
$int_cast = (int)$x;
echo $int_cast;
echo "<br>";
// Cast string to int
$x = "23465.768";
$int_cast = (int)$x;
echo $int_cast;
?>

PHP Constante

Constante PHP
Constantele sunt ca variabilele, cu excepția faptului că, odată definite, nu pot fi modificate sau nedefinite.
Constante PHP
O constantă este un identificator (nume) pentru o valoare simplă. Valoarea nu poate fi modificată în timpul scriptului.
Un nume constant valabil începe cu o literă sau underscore (fără semn $ înainte de numele constant).
Spre deosebire de variabile, constantele sunt automat globale pe întregul script.
Creați o constantă PHP
Pentru a crea o constantă, utilizați funcția define().
Sintaxă
define(name, value, case-insensitive)
Parametrii:
name: Specifică numele constantei.
value: Specifică valoarea constantei.
case-insensitive: Specifică dacă numele constant trebuie să fie case-insensitive. Implicit este fals.
Creați o constantă cu un nume case-sensitive :
<?php
define("SALUT", "Bine ați venit la lectii-virtuale.ro!");
echo SALUT;
?>
Creați o constantă cu un nume sensibil case-insensitive:
<?php
define("SALUT", "Bine ați venit la lectii-virtuale.ro!", true);
echo salut;
?>
PHP Constant Arrays
În PHP7, puteți crea o constantă Array folosind funcția define().
Creați o constantă Array:
<?php
define("cars", [
    "Alfa Romeo",
    "BMW",
    "Toyota"
]);
echo cars[0];
?>
Constantele sunt globale
Constantele sunt automat globale și pot fi utilizate pe întregul script.
Acest exemplu utilizează o constantă în interiorul unei funcții, chiar dacă este definită în afara funcției:
<?php
define("SALUT", "Bine ați venit la lectii-virtuale.ro!");
function myTest() {
    echo SALUT;
}
 myTest();
?>

PHP Operatori

Operatori PHP
Operatorii sunt folosiți pentru a efectua operații cu variabile și valori.
PHP împarte operatorii în următoarele grupuri:
Operatori de aritmetică
Operatori de atribuire
Operatori de comparație
Operatori de creștere / descreștere
Operatori logici
Operatori cu șiruri (string)
Operatori de matrice (array)
Operatori de atribuire condiționată
Operatori Aritmetici PHP
Operatorii aritmetici PHP sunt folosiți cu valori numerice pentru a efectua operațiuni aritmetice comune, cum ar fi adunarea, scăderea, înmulțirea etc.
Operatori PHP de atribuire
Operatorii PHP de atribuire sunt folosiți cu valori numerice pentru a scrie o valoare a unei variabile.
Operatorul de atribuire de bază în PHP este "=". Înseamnă că operandul stâng este setat la valoarea expresiei de atribuire din dreapta.
Operatori PHP de comparație
Operatorii PHP de comparație sunt folosiți pentru a compara două valori (număr sau șir/number or string)
Operatori PHP de creștere / descreștere
Operatorii PHP de incrementare sunt folosiți pentru a crește valoarea unei variabile.
Operatorii PHP de descreștere sunt folosiți pentru a descrește valoarea unei variabile.
Operatori logici PHP
Operatorii logici PHP sunt folosiți pentru a combina instrucțiuni condiționale.
Operatori PHP String
PHP are doi operatori special conceputi pentru string-uri.
Operatori Array PHP
Operatorii Array PHP sunt folosiți pentru a compara matricile.
Operatori PHP de atribuire condiționată
Operatorii PHP de alocare condiționată sunt folosiți pentru a seta o valoare în funcție de condiții.

PHP switch

Instrucțiunea PHP switch
Instrucțiunea switch este utilizată pentru a efectua diferite acțiuni bazate pe condiții diferite.
Instrucțiunea PHP switch
Utilizați instrucțiunea switch pentru a selecta unul dintre numeroasele blocuri de cod care urmează să fie executate.
Sintaxă
switch (n) {
    case label1:
         cod care trebuie executat dacă n=label1;
        break;
    case label2:
         cod care trebuie executat dacă n=label2;
        break;
    case label3:
         cod care trebuie executat dacă n=label3;
        break;
    ...
    default:
         cod care trebuie executat dacă n este diferit de toate labels;
}
Așa funcționează: Mai întâi avem o singură expresie n (cel mai adesea o variabilă), care este evaluată o singură dată. Valoarea expresiei este apoi comparată cu valorile pentru fiecare caz din structură. Dacă există o potrivire, blocul de cod asociat cu acest caz este executat. Folosiți pauză pentru a împiedica automat rularea codului în următorul caz. Instrucțiunea implicită este utilizată dacă nu se găsește nicio potrivire.
<?php
$favcolor = "roșu";
switch ($favcolor) {
    case "roșu":
        echo "Culoarea ta preferată este roșu!";
        break;
    case "albastru":
        echo "Culoarea ta preferată este albastru!";
        break;
    case "verde":
        echo "Culoarea ta preferată este verde!";
        break;
    default:
        echo "Culoarea ta preferată nu este nici roșu, nici albastru, nici verde!";
}
?>

PHP Loops

Bucle PHP (PHP Loops)
În capitolele următoare veți învăța cum să repetați codul folosind bucle (loops) în PHP.
Bucle PHP (PHP Loops)
Adesea, atunci când scrieți cod, doriți ca același block de cod să fie difuzat de mai multe ori un anumit număr de ori. Deci, în loc să adăugăm mai multe linii de cod aproape egale într-un script, putem folosi bucle (loops).
Buclele (loops) sunt utilizate pentru a executa același block de cod din nou și din nou, atâta timp cât o anumită condiție este adevărată (true).
În PHP, avem următoarele tipuri de buclă (loop types):
while - buclează (loops) un block de cod atâta timp cât condiția specificată este adevărată (true).
do ... while - se buclează (loops) o dată printr-un block de cod, apoi se repetă bucla (loop) atâta timp cât condiția specificată este adevărată (true).
for - se buclează (loops) printr-un block de cod de un număr specificat de ori.
foreach - se buclează (loops) printr-un block de cod pentru fiecare element dintr-un tablou.
Capitolele următoare vor explica și vor oferi exemple pentru fiecare tip de buclă (loop type).
PHP bucla while (PHP while Loop)
Bucla while - Bucle printr-un block de cod atâta timp cât condiția specificată este adevărată (true).
PHP bucla while
Bucla while execută un block de cod atâta timp cât condiția specificată este adevărată (true).
Sintaxă
while (condition is true) {
     cod de executat;
}
<?php
$x = 1;
while($x <= 5) {
    echo "Numărul este: $x <br>";
    $x++;
}
?>
$x = 1; - Inițializați contorul de bucle (loop counter) ($x) și setați valoarea de pornire la 1.
$x <= 5 - Continuați bucla (loop) atâta timp cât $x este mai mică sau egală cu 5.
$X ++; - Măriți valoarea contorului buclei (loop counter) cu 1 pentru fiecare iterație.
<?php
$x = 0;
while($x <= 100) {
    echo "Numărul este: $x <br>";
    $x+=10;
}
?>
$x = 0; - Inițializați contorul buclei (loop counter) ($x) și setați valoarea de pornire la 0.
$x <= 100 - Continuați bucla (loop) atât timp cât $x este mai mic sau egal cu 100.
$X + = 10; - Măriți valoarea contorului buclei (loop counter) cu 10 pentru fiecare iterație.
PHP bucla do while (PHP do while Loop)
Bucla do ... while - Buclează (loops) o dată printr-un block de cod, apoi repetă bucla (loop) atâta timp cât condiția specificată este adevărată (true).
PHP bucla do while (PHP do while Loop)
Bucla do ... while va executa întotdeauna blocul de cod o dată, apoi va verifica starea și va repeta bucla (loop) cât timp (while) condiția specificată este adevărată (true).
Sintaxă
do {
    cod de executat;
} while (condition is true);
Exemplul de mai jos stabilește prima variabilă $x la 1 ($x = 1). Apoi, bucla do while (do while loop) va scrie o anumită ieșire, apoi va crește variabila $x cu 1. Apoi, starea este bifată ($x este mai mică sau egală cu 5?), Iar bucla (loop) va continua să funcționeze atâta timp cât $x este mai mică sau egală cu 5:
<?php
$x = 1;
do {
    echo "Numărul este: $x <br>";
    $x++;
} while ($x <= 5);
?>
În bucla do...while (do...while loop) în timp ce condiția este testată DUPĂ executarea instrucțiunilor din buclă (loop). Aceasta înseamnă că bucla do ... while (do...while loop) își va executa instrucțiunile cel puțin o dată, chiar dacă condiția este falsă (false). Vezi exemplul de mai jos.
Acest exemplu stabilește variabila $x la 6, apoi rulează bucla (loop), apoi starea este verificată:
<?php
$x = 6;
do {
    echo "Numărul este: $x <br>";
    $x++;
} while ($x <= 5);
?>
PHP bucla for. (PHP for Loop)
Bucla for -  Buclează (loops) printr-un block de cod de un număr specificat de ori.
PHP bucla for. (PHP for Loop)
Bucla for se utilizează atunci când știi în prealabil de câte ori ar trebui să ruleze scriptul.
Sintaxă
for (init counter; test counter; increment counter) {
    cod care trebuie executat pentru fiecare iterație;
}
Parametrii:
init counter: Initializarea valorii contorului buclei (loop counter).
test counter: evaluare pentru fiecare iterație de buclă (loop iteration). Dacă se evaluează la TRUE, bucla (loop) continuă. Dacă se evaluează la FALSE, bucla (loop) se termină.
increment counter: Crește valoarea contorului buclei (loop counter).
Exemplul de mai jos afișează numerele de la 0 la 10:
<?php
for ($x = 0; $x <= 10; $x++) {
    echo "Numărul este: $x <br>";
}
?>
$x = 0; - Inițializați contorul buclei (loop counter) ($x) și setați valoarea de pornire la 0.
$x <= 10; - Continuați bucla (loop) atâta timp cât $x este mai mic sau egal cu 10.
$x ++ - Măriți valoarea contorului buclei (loop counter) cu 1 pentru fiecare iterație.
Acest exemplu numără până la 100 din zece în zece:
<?php
for ($x = 0; $x <= 100; $x+=10) {
    echo "Numărul este: $x <br>";
}
?>
$x = 0; - Inițializați contorul buclei (loop counter) ($x) și setați valoarea de pornire la 0.
$x <= 100; - Continuați bucla (loop) atâta timp cât $x este mai mic sau egal cu 100.
$x + = 10 - Măriți valoarea contorului buclei (loop counter) cu 10 pentru fiecare iterație.
PHP bucla foreach (PHP foreach Loop)
Bucla foreach - Buclează (loops) printr-un block de cod pentru fiecare element dintr-un tablou (array).
PHP bucla foreach (PHP foreach Loop)
Bucla foreach funcționează numai pe tablouri (arrays) și este utilizată pentru a bucla (loop) fiecare pereche cheie / valoare (key/value ) dintr-un tablou (array).
Sintaxă
foreach ($array as $value) {
  cod de executat;
}
Pentru fiecare iterație de buclă (loop iteration), valoarea elementului array curent este atribuită lui $value, iar indicatorul tabloului (array) este mutat de unul singur până când ajunge la ultimul element de matrice (element array).
Următorul exemplu va emite valorile tabloului dat (array) ($colors):
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $value) {
  echo "$value <br>";
}
?>
<?php
$age = array("Ion"=>"35", "Petre"=>"37", "Tudor"=>"43");
foreach($age as $x => $val) {
  echo "$x = $val<br>";
}
?>

PHP Funcții

Funcții PHP
Puterea reală a PHP provine din funcțiile sale.
PHP are peste 1000 de funcții încorporate și, în plus, vă puteți crea propriile funcții personalizate.
Funcții încorporate în PHP (PHP Built-in Functions)
PHP are peste 1000 de funcții încorporate (built-in) care pot fi apelate direct, dintr-un script, pentru a efectua o sarcină specifică.
Funcții definite de utilizator în PHP
Pe lângă funcțiile PHP încorporate (built-in), este posibil să vă creați propriile funcții.
O funcție este un block de declarații care poate fi utilizat în mod repetat într-un program.
O funcție nu se va executa automat atunci când se încarcă o pagină.
O funcție va fi executată de un apel către funcție.
Creați o funcție definită de utilizator în PHP
O declarație de funcție definită de utilizator (user-defined function) începe cu funcția cuvânt:
Sintaxă
function functionName() {
    cod de executat;
}
Un nume de funcție trebuie să înceapă cu o literă sau o subliniere (underscore).
Numele funcțiilor NU sunt case-sensitive.
Dați funcției un nume care să reflecte ceea ce face funcția!
În exemplul de mai jos, creem o funcție numită "writeMsg()". Paranteza ondulată de deschidere ({) indică începutul codului funcției, iar paranteza ondulată de închidere (}) indică sfârșitul funcției. Funcția întoarce (outputs ) „Hello world!”. Pentru a apela funcția, trebuie doar să scrieți numele ei urmată de paranteze ():
<?php
function writeMsg() {
    echo "Hello world!";
}
writeMsg(); // apelați funcția
?>
Argumentele funcției PHP
Informațiile pot fi transmise funcțiilor prin argumente. Un argument este la fel ca o variabilă.
Argumentele sunt specificate după numele funcției, în interiorul parantezelor. Puteți adăuga oricâte argumente doriți, doar separați-le cu virgulă.
Următorul exemplu are o funcție cu un argument ($fname). Când se numește funcția familyName(), de asemenea, trecem de-a lungul unui nume (de exemplu, Ionescu) și numele este folosit în interiorul funcției, care produce (outputs) mai multe prenume diferite, dar un nume egal:
<?php
function familyName($fname) {
    echo "$fname Refsnes.<br>";
}
familyName("Ionescu");
familyName("Popescu");
familyName("Georgescu");
familyName("Filipescu");
familyName("Zinescu");
?>
Următorul exemplu are o funcție cu două argumente ($fname și $year):
<?php
function familyName($fname, $year) {
    echo "$fname Refsnes.  Născut în $year <br>";
}
familyName("Ionescu", "1975");
familyName("Popescu", "1978");
familyName("Zinescu", "1983");
?>
PHP este un limbaj tiparit mai puțin (PHP is a Loosely Typed Language)
În exemplul precedent, observați că nu trebuie să spunem PHP-ului ce tip de date (data type) este variabila.
PHP asociază automat un tip de date (data type) variabilei, în funcție de valoarea acesteia. Deoarece tipurile de date (data types) nu sunt setate într-un sens strict, puteți face lucruri precum adăugarea unui șir (string) la un număr întreg (integer) fără a provoca o eroare.
În PHP 7, au fost adăugate declarații de tip (type declarations). Aceasta ne oferă opțiunea de a specifica tipul de date (data type) preconizat la declararea unei funcții, iar prin adăugarea declarației strict, va arunca o „Fatal Error” dacă nu există o nepotrivire a tipului de date (data type).
În exemplul următor, încercăm să trimitem atât un număr cât și un șir (string) la funcție fără a folosi o declarația strict:
<?php
function addNumbers(int $a, int $b) {
    return $a + $b;
}
echo addNumbers(5, "5 days");
// deoarece NU este activat strict, „5 days” este schimbat în int(5) și va întoarce 10
?>
Pentru a specifica strict trebuie să setăm declarația (strict_types=1);. Aceasta trebuie să fie chiar în prima linie a fișierului PHP.
În exemplul următor încercăm să trimitem atât un număr cât și un șir (string) la funcție, dar aici am adăugat declarația strict:
<?php declare(strict_types=1); // cerință strictă
function addNumbers(int $a, int $b) {
    return $a + $b;
}
echo addNumbers(5, "5 days");
// din moment ce strict este activat și „5 days” nu este un număr întreg (integer), va fi afișată o eroare
?>
PHP valoarea argumentului default (PHP Default Argument Value)
Următorul exemplu arată cum se utilizează un parametru default (parametru impicit). Dacă numim funcția setHeight() fără argumente, aceasta are valoarea default (valoarea implicită) ca argument:
<?php declare(strict_types=1); // strict requirement
function setHeight(int $minheight = 50) {
    echo "Înălțimea este: $minheight <br>";
}
setHeight(350);
setHeight(); // vom folosi valoarea default (valoarea implicită) of 50
setHeight(135);
setHeight(80);
?>
Funcții PHP - Returnarea valorilor
Pentru a permite unei funcții să returneze o valoare, utilizați instrucțiunea return:
<?php declare(strict_types=1); // cerință strictă
function sum(int $x, int $y) {
    $z = $x + $y;
    return $z;
}
echo "5 + 10 = " . sum(5, 10) . "<br>";
echo "7 + 13 = " . sum(7, 13) . "<br>";
echo "2 + 4 = " . sum(2, 4);
?>
PHP Declarații de tip return (PHP Return Type Declarations)
PHP 7 acceptă, de asemenea, declarații de tip (Type Declarations) pentru instrucțiunea return. Ca și în cazul declarației de tip (type declaration) pentru argumentele funcției, activând cerința strictă, va returna o „Fatal Error” ca nepotrivire de tip (type mismatch).
Pentru a declara un tip (type) pentru funcția returnată, adăugați două puncte (:) și tipul (type) chiar înainte de paranteza ondulată de deschidere ({) la declararea funcției.
În următorul exemplu, specificăm tipul return (return type) pentru funcție:
<?php declare(strict_types=1); // cerință strictă
function addNumbers(float $a, float $b) : float {
    return $a + $b;
}
echo addNumbers(1.2, 5.2);
?>
Puteți specifica un tip de returnare (return type) diferit de cel al argumentelor, dar asigurați-vă că returnarea este cea corectă:
<?php declare(strict_types=1); // cerință strictă
function addNumbers(float $a, float $b) : int {
    return (int)($a + $b);
}
echo addNumbers(1.2, 5.2);
?>

PHP Array

Un array (tablou) stochează mai multe valori într-o singură variabilă:
<?php
$cars = array("Volvo", "BMW", "Toyota");
echo "Îmi place " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>
Ce este un Array?
Un array (tablo) este o variabilă specială, care poate reține mai mult de o valoare simultan.
Dacă aveți o listă de articole (de exemplu, o listă cu nume de mașini), stocarea mașinilor în variabile unice ar putea arăta astfel:
$cars1 = "Volvo";
$cars2 = "BMW";
$cars3 = "Toyota";
Cu toate acestea, ce se întâmplă dacă doriți să vă buclați (loop) între mașini și să găsiți una specifică? Și dacă nu ai avea 3 mașini, ci 300?
Soluția este să creezi un array (tablou)!
Un array (tablou) poate reține multe valori sub un singur nume și puteți accesa valorile făcând referire la un număr de index.
Creați un array (o matrice) în PHP
În PHP, funcția array() este utilizată pentru a crea un tablou (array):
array ();
În PHP, există trei tipuri de matrice:
Matrice indexate (Indexed arrays) - Arrays cu un index numeric
Matrice asociative (Associative arrays) - Arrays cu chei (keys) numite
Matricele multidimensionale (Multidimensional arrays) - Arrays care conțin unul sau mai multe tablouri (arrays)
Obțineți Lungimea unui Array - Funcția count()
Funcția count() este utilizată pentru a returna lungimea (numărul de elemente) unui array (tablou):
<?php
$cars = array("Volvo", "BMW", "Toyota");
echo count($cars);
?>
PHP matrice indexate (PHP Indexed Arrays)
Există două moduri de a crea tablouri indexate (indexed arrays):
Indexul poate fi atribuit automat (indexul începe întotdeauna de la 0), astfel:
$cars = array("Volvo", "BMW", "Toyota");
sau indexul poate fi atribuit manual:
$cars[0] = "Volvo";
$cars[1] = "BMW";
$cars[2] = "Toyota";
Următorul exemplu creează un tablou indexat (indexed array) numit $cars, îi atribuie trei elemente și apoi tipărește un text care conține valorile tabloului (array values):
<?php
$cars = array("Volvo", "BMW", "Toyota");
echo "Îmi place " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>
Buclă printr-o matrice indexată (Loop Through an Indexed Array)
Pentru a parcurge și tipări toate valorile unui tablou indexat (indexed array), puteți utiliza o buclă (loop) for, astfel:
<?php
$cars = array("Volvo", "BMW", "Toyota");
$arrlength = count($cars);
for($x = 0; $x < $arrlength; $x++) {
    echo $cars[$x];
    echo "<br>";
}
?>
PHP matrice asociative (PHP Associative Arrays)
Matricele asociative (associative arrays) sunt tablouri (arrays) care folosesc chei numite (named keys) pe care le atribuiți lor.
Există două moduri de a crea un tablou asociativ (associative array):
$age = array("Petre"=>"35", "Ion"=>"37", "Dan"=>"43");
sau:
$age['Petre'] = "35";
$age['Ion'] = "37";
$age['Dan'] = "43";
Cheile denumite (named keys) pot fi apoi utilizate într-un script:
<?php
$age = array("Petre"=>"35", "Ion"=>"37", "Dan"=>"43");
echo "Petre are " . $age['Petre'] . " ani.";
?>
Buclă printr-o matrice asociativă (Loop Through an Associative Array)
Pentru a parcurge și tipări toate valorile unui tablou asociativ (associative array), puteți utiliza o buclă (loop) foreach, astfel:
<?php
$age = array("Petre"=>"35", "Ion"=>"37", "Dan"=>"43");
foreach($age as $x => $x_value) {
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>
PHP matrice multidimensionale (PHP Multidimensional Arrays)
În paginile anterioare, am descris matricile (arrays) care reprezintă o listă unică de perechi cheie/valoare (key/value).
Cu toate acestea, uneori doriți să stocați valorile cu mai mult de o cheie. Pentru aceasta, avem tablouri multidimensionale (multidimensional arrays).
PHP - Arrayuri multidimensionale
Un tablou multidimensional (multidimensional array) este un tablou (array) care conține unul sau mai multe tablouri (arrays).
PHP acceptă tablouri multidimensionale (multidimensional arrays) care sunt la două, trei, patru, cinci sau mai multe niveluri. Cu toate acestea, tablourile (arrays) cu mai mult de trei niveluri sunt greu de gestionat pentru majoritatea oamenilor.
Dimensiunea unui tablou (array) indică numărul de indici de care aveți nevoie pentru a selecta un element.
Pentru un tablou bidimensional (two-dimensional array), aveți nevoie de doi indici pentru a selecta un element
Pentru un tablou tridimensional (three-dimensional array), aveți nevoie de trei indici pentru a selecta un elementPHP - Matricele bidimensionale (PHP - Two-dimensional Arrays)
Un tablou bidimensional (two-dimensional array) este un tablou de matrice (array of arrays) (un tablou tridimensional (three-dimensional array) este un tablou de tablouri (arrays of arrays)).
Putem stoca datele dintr-un tabel într-un tablou bidimensional (two-dimensional array), astfel:
$cars = array
  (
  array("Volvo",22,18),
  array("BMW",15,13),
  array("Saab",5,2),
  array("Land Rover",17,15)
  );
Acum, two-dimensional $cars array conține patru tablouri (arrays) și are doi indici: rând și coloană (row and column).
Pentru a avea acces la elementele tabloului (array) $cars trebuie să indicăm cei doi indici (rând și coloană/row and column):
<?php
echo $cars[0][0].": În stoc: ".$cars[0][1].", sold: ".$cars[0][2].".<br>";
echo $cars[1][0].": În stoc: ".$cars[1][1].", sold: ".$cars[1][2].".<br>";
echo $cars[2][0].": În stoc: ".$cars[2][1].", sold: ".$cars[2][2].".<br>";
echo $cars[3][0].": În stoc: ".$cars[3][1].", sold: ".$cars[3][2].".<br>";
?>
<?php
for ($row = 0; $row < 4; $row++) {
  echo "<p><b>Numărul rândului $row</b></p>";
  echo "<ul>";
  for ($col = 0; $col < 3; $col++) {
    echo "<li>".$cars[$row][$col]."</li>";
  }
  echo "</ul>";
}
?>
PHP matrice de sortare. (PHP Sorting Arrays)
Elementele dintr-un tablou (array) pot fi sortate în ordine alfabetică sau numerică, descrescător sau crescător.
PHP - Funcții de sortare pentru matrice (PHP - Sort Functions For Arrays)
În acest capitol, vom parcurge următoarele funcții de sortare a tablelor (arrays) PHP:
sort() - sortează tablourile (arrays) în ordine crescătoare.
rsort() - sortează tablourile (arrays) în ordine descrescătoare.
asort() - sortează tablourile asociative (associative arrays) în ordine crescătoare, în funcție de valoare.
ksort() - sortează matricile asociative (associative arrays) în ordine crescătoare, în funcție de cheie.
arsort() - sortează tablourile asociative (associative arrays) în ordine descrescătoare, în funcție de valoare.
krsort() - sortează tablourile asociative (associative arrays) în ordine descrescătoare, în funcție de cheie.
Sortare Array în ordine crescătoare - sort()
Următorul exemplu sortează elementele tabloului (array) $cars în ordine alfabetică ascendentă:
<?php
$cars = array("Volvo", "BMW", "Toyota");
sort($cars);
?>
Următorul exemplu sortează elementele tabloului (array) $numbers în ordine numerică crescătoare:
<?php
$numbers = array(4, 6, 2, 22, 11);
sort($numbers);
?>
Sortare Array în ordine descrescătoare - rsort()
Următorul exemplu sortează elementele tabloului (array) $cars în ordine alfabetică descrescătoare:
<?php
$cars = array("Volvo", "BMW", "Toyota");
rsort($cars);
?>
Următorul exemplu sortează elementele tabloului (array) $numbers în ordine numerică descrescătoare:
<?php
$numbers = array(4, 6, 2, 22, 11);
rsort($numbers);
?>
Sortare Array (ordine crescătoare), în funcție de valoarea - asort()
Următorul exemplu sortează un tablou asociativ (associative array) în ordine crescătoare, în funcție de valoare:
<?php
$age = array("Petre"=>"35", "Ion"=>"37", "Dan"=>"43");
asort($age);
?>
Sortare Array (ordine crescătoare), în funcție de cheia - ksort()
Următorul exemplu sortează un tablou asociativ (associative array) în ordine crescătoare, în funcție de cheie:
<?php
$age = array("Petre"=>"35", "Ion"=>"37", "Dan"=>"43");
ksort($age);
?>
Sortare Array (ordine descrescătoare), în funcție de valoarea - arsort()
Următorul exemplu sortează un tablou asociativ (associative array) în ordine descrescătoare, în funcție de valoare:
<?php
$age = array("Petre"=>"35", "Ion"=>"37", "Dan"=>"43");
arsort($age);
?>
Sortare Array (ordine descrescătoare), în funcție de cheia - krsort()
Următorul exemplu sortează un tablou asociativ (associative array) în ordine descrescătoare, în funcție de cheie:
<?php
$age = array("Petre"=>"35", "Ion"=>"37", "Dan"=>"43");
krsort($age);
?>

PHP Variabile Globale - Superglobale

PHP Variabile Globale - Superglobalele
Superglobalele au fost introduse în PHP 4.1.0 și sunt variabile încorporate (built-in variables) care sunt întotdeauna disponibile în toate domeniile.
PHP Variabile Globale - Superglobalele
Unele variabile predefinite din PHP sunt „superglobale”, ceea ce înseamnă că sunt întotdeauna accesibile, indiferent de sfera de acțiune - și le puteți accesa din orice funcție, clasă sau fișier fără a fi nevoie să faceți nimic special.
Variabilele superglobale PHP sunt: $GLOBALS, $_SERVER, $_REQUEST, $_POST, $_GET, $_FILES, $_ENV, $_COOKIE, $_SESSION.
Capitolele următoare vor explica unele dintre superglobale, iar restul va fi explicat în capitolele ulterioare.
PHP Superglobal - $GLOBALS
Variabilele super globale sunt variabile încorporate (built-in variables), care sunt întotdeauna disponibile în toate domeniile.
PHP $GLOBALS
$GLOBALS este o variabilă super globală PHP, care este utilizată pentru a accesa variabile globale de oriunde în scriptul PHP (de asemenea, din funcții sau metode).
PHP stochează toate variabilele globale într-un tablou numit $GLOBALS [index]. Indicele conține numele variabilei.
Exemplul de mai jos arată cum se utilizează variabila super globală $GLOBALS:
<?php
$x = 75;
$y = 25;
 function addition() {
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
 addition();
echo $z;
?>
În exemplul de mai sus, deoarece z este o variabilă prezentă în matricea (array) $GLOBALS, este accesibilă și din afara funcției!
PHP Superglobal - $_SERVER
Variabilele super globale sunt variabile încorporate (built-in variables), care sunt întotdeauna disponibile în toate domeniile.
PHP $ _SERVER
$ _SERVER este o variabilă super globală PHP care conține informații despre antetele, căile și locațiile scriptului (headers, paths, and script locations).
Exemplul de mai jos arată cum să folosiți unele dintre elementele din $ _SERVER:
<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
Următorul tabel prezintă cele mai importante elemente care pot intra în interiorul $ _SERVER:
$ _SERVER ['PHP_SELF'] Returnează numele de fișier al scriptului care se execută în prezent
$ _SERVER ['GATEWAY_INTERFACE'] Returnează versiunea Interfaței de Gateway comun (CGI) pe care serverul o folosește
$ _SERVER ['SERVER_ADDR'] Returnează adresa IP a serverului gazdă
$ _SERVER ['SERVER_NAME'] returnează numele serverului gazdă (cum ar fi www.w3schools.com)
$ _SERVER ['SERVER_SOFTWARE'] returnează șirul de identificare a serverului (cum ar fi Apache / 2.2.24)
$ _SERVER ['SERVER_PROTOCOL'] returnează numele și revizuirea protocolului informațional (cum ar fi HTTP / 1.1)
$ _SERVER ['REQUEST_METHOD'] returnează metoda de solicitare folosită pentru a accesa pagina (cum ar fi POST)
$ _SERVER ['REQUEST_TIME'] returnează intervalul de timp al începerii cererii (cum ar fi 1377687496)
$ _SERVER ['QUERY_STRING'] Returnează șirul de interogare dacă pagina este accesată printr-un șir de interogare
$ _SERVER ['HTTP_ACCEPT'] Returnează antetul Accept din cererea curentă
$ _SERVER ['HTTP_ACCEPT_CHARSET'] returnează antetul Accept_Charset din cererea curentă (cum ar fi utf-8, ISO-8859-1)
$ _SERVER ['HTTP_HOST'] Returnează antetul gazdei din cererea curentă
$ _SERVER ['HTTP_REFERER'] returnează adresa URL completă a paginii curente (nu este de încredere, deoarece nu toți agenții utilizator o acceptă)
$ _SERVER ['HTTPS'] Este scriptul cerut printr-un protocol HTTP sigur
$ _SERVER ['REMOTE_ADDR'] Returnează adresa IP de unde utilizatorul vizualizează pagina curentă
$ _SERVER ['REMOTE_HOST'] returnează numele gazdei de unde utilizatorul vizualizează pagina curentă
$ _SERVER ['REMOTE_PORT'] Returnează portul utilizat pe mașina utilizatorului pentru a comunica cu serverul web
$ _SERVER ['SCRIPT_FILENAME'] Returnează numele de cale absolut al scriptului care se execută în prezent
$ _SERVER ['SERVER_ADMIN'] Returnează valoarea acordată directivei SERVER_ADMIN din fișierul de configurare a serverului web (dacă scriptul rulează pe o gazdă virtuală, va fi valoarea definită pentru acea gazdă virtuală) (cum ar fi [email protected] )
$ _SERVER ['SERVER_PORT'] Returnează portul pe mașina serverului care este utilizat de serverul web pentru comunicare (cum ar fi 80)
$ _SERVER ['SERVER_SIGNATURE'] Returnează versiunea serverului și numele gazdei virtuale care sunt adăugate la paginile generate de server
$ _SERVER ['PATH_TRANSLATED'] returnează calea bazată pe sistemul de fișiere la scriptul curent
$ _SERVER ['SCRIPT_NAME'] returnează calea scriptului curent
$ _SERVER ['SCRIPT_URI'] Returnează URI-ul paginii curente
PHP Superglobal - $_REQUEST
Variabilele super globale sunt variabile încorporate (built-in variables), care sunt întotdeauna disponibile în toate domeniile.
PHP $ _REQUEST
PHP $ _REQUEST este o variabilă super globală PHP care este folosită pentru a colecta date după trimiterea unui formular HTML.
Exemplul de mai jos arată un formular cu un câmp de intrare și un buton de trimitere (input field și submit button). Când un utilizator trimite datele făcând click pe „Trimite” (Submit), datele formularului sunt trimise fișierului specificat în atributul de acțiune (action attribute) al etichetei (tag) <form>. În acest exemplu, indicăm acest fișier în sine pentru prelucrarea datelor din formular. Dacă doriți să utilizați un alt fișier PHP pentru procesarea datelor din formular, înlocuiți-l cu numele de fișier ales. Apoi, putem folosi super variabila globală $ _REQUEST pentru a colecta valoarea câmpului de intrare (input field):
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  Nume: <input type="text" name="fname">
  <input type="submit">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // colectați valoarea câmpului de intrare (input field)
    $name = $_REQUEST['fname'];
    if (empty($name)) {
        echo "Numele este gol";
    } else {
        echo $name;
    }
}
?>
</body>
</html>
PHP Superglobal - $_POST
Variabilele super globale sunt variabile încorporate (built-in variables), care sunt întotdeauna disponibile în toate domeniile.
PHP $ _POST
PHP $ _POST este o variabilă super globală PHP, care este folosită pentru a colecta date de formular după trimiterea unui formular HTML cu method="post".
$ _POST este de asemenea utilizat pe scară largă pentru a trece variabilele.
Exemplul de mai jos arată un formular cu un câmp de intrare și un buton de trimitere (input field și submit button). Când un utilizator trimite datele făcând click pe „Trimite” (Submit), datele formularului sunt trimise fișierului specificat în atributul de acțiune (action attribute) al etichetei (tag) <form>. În acest exemplu, indicăm fișierul în sine pentru prelucrarea datelor din formular. Dacă doriți să utilizați un alt fișier PHP pentru procesarea datelor din formular, înlocuiți-l cu numele de fișier ales. Apoi, putem utiliza super variabila globală $ _POST pentru a colecta valoarea câmpului de intrare (input field):
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  Nume: <input type="text" name="fname">
  <input type="submit">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // colectați valoarea câmpului de intrare (input field)
    $name = $_POST['fname'];
    if (empty($name)) {
        echo "Numele este gol";
    } else {
        echo $name;
    }
}
?>
</body>
</html>
PHP Superglobal - $_GET
Variabilele super globale sunt variabile încorporate (built-in variables), care sunt întotdeauna disponibile în toate domeniile.
PHP $ _GET
PHP $ _GET este o variabilă super globală PHP, care este utilizată pentru a colecta date de formular după trimiterea unui formular HTML cu method="get".
$ _GET poate colecta și datele trimise pe adresa URL.
Presupunem că avem o pagină HTML care conține un hyperlink cu parametri:
 <html>
<body>
<a href="test_get.php?subject=PHP&web=lectii-virtuale.ro">Test $GET</a>
</body>
</html>
Când un utilizator face click pe linkul „Test $GET”, parametrii „subject” și „web” sunt trimiși la „test_get.php”, iar apoi puteți accesa valorile sale în „test_get.php” cu $_GET.
Exemplul de mai jos arată codul din „test_get.php”:
<html>
<body>
<?php
echo "Studiu " . $_GET['subject'] . " la " . $_GET['web'];
?>
</body>
</html>

PHP Manipularea formularelor

PHP Form Handling
Superglobalele PHP $_GET și $_POST sunt utilizate pentru colectarea datelor de formular.
PHP - Un formular HTML simplu
Exemplul de mai jos afișează un formular HTML simplu cu două câmpuri de introducere și un buton de trimitere (input fields și submit button):
<html>
<body>
<form action="welcome.php" method="post">
Nume: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
Când utilizatorul completează formularul de mai sus și face click pe butonul de trimitere (submit), datele formularului sunt trimise pentru procesare într-un fișier PHP numit „welcome.php”. Datele formularului sunt trimise cu metoda HTTP POST.
Pentru a afișa datele trimise, pur și simplu puteți echo toate variabilele. „Welcome.php” arată astfel:
<html>
<body>
Bun venit <?php echo $_POST["name"]; ?><br>
Adresa dvs. de e-mail este: <?php echo $_POST["email"]; ?>
</body>
</html>
Rezultatul ar putea fi ceva de genul:
Bun venit Ion
Adresa dvs. de e-mail este [email protected]
Același rezultat ar putea fi obținut și folosind metoda HTTP GET:
<html>
<body>
<form action="welcome_get.php" method="get">
Nume: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
și „welcome_get.php” arată astfel:
<html>
<body>
Bun venit <?php echo $_GET["name"]; ?><br>
Adresa dvs. de e-mail este: <?php echo $_GET["email"]; ?>
</body>
</html>
Codul de mai sus este destul de simplu. Cu toate acestea, cel mai important lucru lipsește. Trebuie să validați datele formularului pentru a vă proteja scriptul împotriva codului rău intenționat.
Gândiți-vă la SECURITATE când prelucrați formularele PHP!
Această pagină nu conține nicio validare a formularului, ci doar arată cum puteți trimite și recupera datele de formular.
Cu toate acestea, paginile următoare vor arăta cum să procesați formularele PHP cu securitate în minte! Validarea corectă a datelor formularului este importantă pentru a vă proteja formularul de hackeri și spameri!
GET vs. POST
Atât GET, cât și POST creează un tablou (array) (de exemplu, array( key1 => value1, key2 => value2, key3 => value3, ...)). Acest tablou (array) conține perechi cheie/valoare (key/value), unde cheile (keys) sunt numele controalelor de formular (form controls) și valorile sunt datele de intrare (input data) de la utilizator.
Atât GET, cât și POST sunt tratate ca $_GET și $_POST. Acestea sunt superglobale, ceea ce înseamnă că sunt întotdeauna accesibile, indiferent de sfera de aplicare - și le puteți accesa din orice funcție, clasă sau fișier (function, class or file) fără a fi nevoie să faceți nimic special.
$_GET reprezintă o serie de variabile transmise scriptului curent prin parametrii URL.
$ _POST reprezintă o serie de variabile transmise scriptului curent prin metoda HTTP POST.
Când să folosiți GET?
Informațiile trimise dintr-un formular cu metoda GET sunt vizibile tuturor (toate numele variabilelor și valorile (variable names/ values) sunt afișate pe adresa URL). GET are, de asemenea, limite privind cantitatea de informații care trebuie trimise. Limitarea este de aproximativ 2000 de caractere. Cu toate acestea, deoarece variabilele sunt afișate în adresa URL, este posibilă marcarea paginii. Acest lucru poate fi util în unele cazuri.
GET poate fi utilizat pentru trimiterea de date non-sensibile (non-sensitive data).
GET nu ar trebui niciodată utilizat pentru trimiterea de parole sau alte informații sensibile!
Când să folosiți POST?
Informațiile trimise dintr-un formular cu metoda POST sunt invizibile pentru alții (toate numele/valorile (names/values) sunt încorporate în corpul solicitării (body) HTTP) și nu au limite privind cantitatea de informații de trimis.
Mai mult, POST acceptă funcționalități avansate, cum ar fi asistența pentru intrarea binară în mai multe părți (multi-part binary input) în timp ce încărcați fișiere pe server.
Cu toate acestea, deoarece variabilele nu sunt afișate în adresa URL, nu este posibilă marcarea paginii.
Dezvoltatorii preferă POST pentru trimiterea datelor de formular (form data).

PHP Validare formular

Validare formular PHP
Acesta și capitolele următoare arată cum să folosești PHP pentru a valida datele formularului.
Validare formular PHP
Gândiți-vă la SECURITATE când prelucrați formularele PHP!
Aceste pagini vor arăta cum să procesați formularele PHP din punct de vedere al securitatii. Validarea corectă a datelor din formular este importantă pentru a vă proteja formularul de hackeri și spameri!
Formularul HTML la care vom lucra în aceste capitole, conține diferite câmpuri de introducere: câmpuri de text obligatorii și opționale, butoane radio și un buton de trimitere (required and optional text fields, radio buttons, and a submit button):
Name - Obligatoriu. + Trebuie să conțină doar litere și spațiu alb
E-mail - Obligatoriu. + Trebuie să conțină o adresă de e-mail validă (cu @ și.)
Website - Obligatoriu. Dacă este prezent, trebuie să conțină o adresă URL validă
Comment - Opțional. Câmp de introducere pe mai multe linii (textarea)
Sex - Obligatoriu. Trebuie să selectați una
Mai întâi vom analiza codul HTML simplu pentru formular:
Câmpuri text (Text Fields)
Câmpurile nume, e-mail și website sunt elemente de introducere ale textului (input elements), iar câmpul de comentarii este textarea. Codul HTML arată astfel:
Nume: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
Butoane radio (Radio Buttons)
Câmpurile gen (gender fields) sunt butoane radio, iar codul HTML arată astfel:
Gen:
<input type="radio" name="gender" value="female">Femeie
<input type="radio" name="gender" value="male">Bărbat
<input type="radio" name="gender" value="other">Altele
Elementul form (The Form Element)
Codul HTML al formularului arată astfel:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Când formularul este trimis, datele formularului sunt trimise cu method = "post".
Ce este variabila $_SERVER["PHP_SELF"] ?
$_SERVER["PHP_SELF"] este o variabilă super globală care returnează numele de fișier al scriptului care se execută în prezent.
Așadar, $_SERVER["PHP_SELF"] trimite datele formularului (submitted form data) trimis către pagina în sine, în loc să sară pe o altă pagină. În acest fel, utilizatorul va primi mesaje de eroare pe aceeași pagină ca și formularul.
Ce este funcția htmlspecialchars()?
Funcția htmlspecialchars() convertește caracterele speciale în entități HTML. Aceasta înseamnă că va înlocui caractere HTML precum <and> cu &lt; și &gt;. Acest lucru împiedică atacatorii să exploateze codul prin injectarea codului HTML sau a javascriptului (Cross-site Scripting attacks) în formulare.
Notă imporantă privind securitatea formularului PHP
Variabila $_SERVER["PHP_SELF"] poate fi utilizată de hackeri!
Dacă PHP_SELF este utilizat în pagina dvs., un utilizator poate introduce un slash (/) și apoi unele comenzi de Cross Site Scripting (XSS) pentru a executa.
Scripturi încrucișate (Cross-site scripting) (XSS) este un tip de vulnerabilitate a securității computerului care se găsește de obicei în aplicațiile Web. XSS le permite atacatorilor să injecteze scripturi din partea clientului în paginile Web vizualizate de alți utilizatori.
Presupunem că avem următorul formular într-o pagină numită "test_form.php":
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Acum, dacă un utilizator introduce URL-ul normal în bara de adrese precum "http://www.example.com/test_form.php", codul de mai sus va fi tradus în:
<form method="post" action="test_form.php">
Până acum, bine.
Cu toate acestea, considerați că un utilizator introduce următoarea adresă URL în bara de adrese:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
În acest caz, codul de mai sus va fi tradus în:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
Acest cod adaugă o etichetă script (script tag) și o comandă de alertă (alert command). Și atunci când pagina se încarcă, codul JavaScript va fi executat (utilizatorul va vedea o casetă de alertă (alert box)). Acesta este doar un exemplu simplu și inofensiv cum poate fi exploatată variabila PHP_SELF.
Fiți conștienți de faptul că orice cod JavaScript poate fi adăugat în eticheta <script>! Un hacker poate redirecționa utilizatorul către un fișier de pe alt server, iar respectivul fișier poate conține cod rău intenționat care poate modifica variabilele globale sau poate trimite formularul la o altă adresă pentru a salva datele utilizatorului, de exemplu.
Cum să evitați exploatările $_SERVER["PHP_SELF"]?
Exploatările $_SERVER["PHP_SELF"] pot fi evitate folosind funcția htmlspecialchars().
Codul formularului ar trebui să arate astfel:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Funcția htmlspecialchars() convertește caracterele speciale în entități HTML. Acum, dacă utilizatorul încearcă să exploateze variabila PHP_SELF, va rezulta următoarea ieșire (output):
<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">
Validați datele formularului cu PHP
Primul lucru pe care îl vom face este să trecem toate variabilele prin funcția PHP htmlspecialchars().
Când folosim funcția htmlspecialchars(); atunci dacă un utilizator încearcă să trimită următoarele într-un câmp text:
<script>location.href('http://www.hacked.com')</script>
- acest lucru nu ar fi executat, deoarece va fi salvat ca și cod HTML scăpat, astfel:
&lt;script&gt;location.href('http://www.hacked.com')&lt;/script&gt;
Codul este acum sigur pentru a fi afișat pe o pagină sau în interiorul unui e-mail.
De asemenea, vom face alte două lucruri atunci când utilizatorul va trimite formularul:
Scoateți caracterele inutile (spațiu suplimentar, filă, linie nouă (extra space, tab, newline)) din datele de intrare ale utilizatorului (cu funcția PHP trim() )
Eliminați backslashes (\) din datele de intrare ale utilizatorului (cu funcția PHP stripslashes())Următorul pas este să creem o funcție care să facă toate verificările pentru noi (ceea ce este mult mai convenabil decât scrierea aceluiași cod încă o dată).
Vom numi funcția test_input().
Acum, putem verifica fiecare variabilă $_POST cu funcția test_input(), iar scriptul va arata astfel:
<?php
// definiți variabilele și setați valorile goale
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>
Observați că la începutul scriptului, verificăm dacă formularul a fost trimis folosind $_SERVER ["REQUEST_METHOD"]. Dacă REQUEST_METHOD este POST, atunci formularul a fost trimis - și ar trebui validat. Dacă nu a fost trimis, săriți validarea și afișați un formular necompletat.
Cu toate acestea, în exemplul de mai sus, toate câmpurile de introducere sunt opționale. Scriptul funcționează bine chiar dacă utilizatorul nu introduce date.
Următorul pas este de a face necesare câmpurile de intrare și de a crea mesaje de eroare, dacă este nevoie.

PHP Formular Obligatoriu

Formulare PHP - Câmpuri obligatorii (PHP Forms - Required Fields)
Acest capitol arată cum se pot face câmpurile de intrare necesare (input fields required) și se pot crea mesaje de eroare (error messages), dacă este nevoie.
PHP - Câmpuri obligatorii (PHP - Required Fields)
Din tabelul cu regulile de validare din pagina anterioară, vedem că sunt obligatorii câmpurile „Nume”, „E-mail” și „Gen”. Aceste câmpuri nu pot fi goale și trebuie completate în formularul HTML.
Nume- Obligatoriu. Trebuie să conțină doar litere și spațiu alb.
E-mail - Obligatoriu. Trebuie să conțină o adresă de e-mail validă (cu @ și.).
Website - Opțional. Dacă este prezent, trebuie să conțină o adresă URL validă.
Comentariu - Opțional. Câmp de introducere pe mai multe linii (textarea).
Gen - Obligatoriu. Trebuie să selectați unul.
În capitolul precedent, toate câmpurile de intrare (input fields) au fost opționale.
În codul următor, am adăugat câteva variabile noi: $nameErr, $emailErr, $genderErr și $websiteErr $. Aceste variabile de eroare (error variables) vor conține mesaje de eroare (error messages) pentru câmpurile necesare (required fields). Am adăugat, de asemenea, o instrucțiune if else pentru fiecare variabilă $_POST. Se verifică dacă variabila $_POST este goală (cu funcția PHP empty()). Dacă este gol, un mesaj de eroare (error message) este stocat în diferite variabile de eroare (error variables)  și, dacă nu este gol, trimite datele de intrare (input data) ale utilizatorului prin funcția test_input():
<?php
// definiți variabilele și setați valorile goale
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
  }
  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
  }
  if (empty($_POST["website"])) {
    $website = "";
  } else {
    $website = test_input($_POST["website"]);
  }
  if (empty($_POST["comment"])) {
    $comment = "";
  } else {
    $comment = test_input($_POST["comment"]);
  }
  if (empty($_POST["gender"])) {
    $genderErr = "Gender is required";
  } else {
    $gender = test_input($_POST["gender"]);
  }
}
?>
PHP - Afișează mesajele de eroare (PHP - Display The Error Messages)
Apoi, în formularul HTML, adăugăm putin de script după fiecare câmp necesar (required field), care generează mesajul de eroare (error message) corect dacă este necesar (adică dacă utilizatorul încearcă să trimită formularul fără a completa câmpurile necesare (required fields)):
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Nume: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail:
<input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website:
<input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
Coment: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Gen:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
Următorul pas este validarea datelor de intrare (input data), adică „Conține câmpul Nume doar litere și spațiu alb?”, iar „Conține câmpul E-mail o sintaxă a adresei de e-mail validă?”, iar dacă este completat, ”Conține câmpul Website o adresă URL validă? ".

PHP Formular - E-mail/URL

Formulare PHP - Validați e-mailul și adresa URL
Acest capitol arată cum se pot valida numele, e-mailurile și adresele URL.
PHP - Validare nume
Codul de mai jos arată o modalitate simplă de a verifica dacă câmpul de nume conține doar litere și spațiu alb. Dacă valoarea câmpului nume nu este validă, atunci stocați un mesaj de eroare:
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
  $nameErr = "Sunt permise doar litere și spațiu alb";
}
Funcția preg_match() caută un șir de șablon (string for pattern), returnând adevărat (true) dacă modelul (pattern) există și fals (false) altfel.
PHP - Validare e-mail
Cel mai simplu și mai sigur mod de a verifica dacă o adresă de e-mail este bine formulată este să folosești funcția PHP filter_var().
În codul de mai jos, dacă adresa de e-mail nu este bine formulată, atunci stocați un mesaj de eroare (error message):
$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
  $emailErr = "Format de e-mail invalid";
}
PHP - Validare URL
Codul de mai jos arată o modalitate de a verifica dacă o sintaxă a adresei URL este validă (această expresie obișnuită permite și liniuțe în adresa URL). Dacă sintaxa adresei URL nu este validă, atunci stocați un mesaj de eroare (error message):
$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
  $websiteErr = "URL invalid";
}
PHP - Validați numele, e-mailul și adresa URL
Scriptul acum arată așa:
<?php
// definiți variabilele și setați valorile goale
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Numele este necesar";
  } else {
    $name = test_input($_POST["name"]);
    // verificați dacă numele conține doar litere și spațiu alb
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
      $nameErr = "Sunt permise doar litere și spațiu alb";
    }
  }
  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
    // verificați dacă adresa de e-mail este bine formulată
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr = "Format de e-mail nevalid";
    }
  }
 if (empty($_POST["website"])) {
    $website = "";
  } else {
    $website = test_input($_POST["website"]);
    // verificați dacă sintaxa adresei URL este validă (această expresie obișnuită permite și liniuțe în URL)
    if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
      $websiteErr = "URL nevalid";
    }
  }
 if (empty($_POST["comment"])) {
    $comment = "";
  } else {
    $comment = test_input($_POST["comment"]);
  }
  if (empty($_POST["gender"])) {
    $genderErr = "Genul este necesar";
  } else {
    $gender = test_input($_POST["gender"]);
  }
}
?>
Următorul pas este să arătați cum să împiedicați formularul să golească toate câmpurile de intrare (input fields) atunci când utilizatorul trimite formularul.

PHP Formular complet

Exemplu de formular complet PHP (PHP Complete Form Example)
Acest capitol arată cum să păstrați valorile în câmpurile de introducere (input fields) atunci când utilizatorul apasă butonul de trimitere (submit button).
PHP - Păstrați valorile în formular
Pentru a afișa valorile din câmpurile de intrare (input fields) după ce utilizatorul apasă pe butonul de trimitere (submit button), adăugăm puțin script PHP în interiorul valorii atributului (value attribute) al următoarelor câmpuri de intrare (input fields): nume, e-mail și site-ul web (name, email, and website). În câmpul textarea (textarea field) comment, am pus scriptul între etichetele (tags)<textarea> și </textarea>. Micul script produce (outputs) valoarea variabilelor $name, $email, $website și $comment.
Apoi, trebuie să arătăm și ce buton radio (radio button) a fost bifat. Pentru aceasta, trebuie să manipulăm atributul bifat (checked attribute) (nu atributul valoare pentru butoanele radio) (radio buttons):
Nume: <input type="text" name="name" value="<?php echo $name;?>">
E-mail: <input type="text" name="email" value="<?php echo $email;?>">
Website: <input type="text" name="website" value="<?php echo $website;?>">
Comentariu: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
Gen:
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="female") echo "checked";?>
value="female">Femeie
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="male") echo "checked";?>
value="male">Bărbat
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="other") echo "checked";?>
value="other">Altele

PHP Include

PHP fișiere include (PHP Include Files)
Instrucțiunea include (sau require) preia tot textul / codul / marcajul (text/code/markup) care există în fișierul specificat și îl copiază în fișierul care folosește instrucțiunea include.
Includerea fișierelor este foarte utilă atunci când doriți să includeți același PHP, HTML sau text în mai multe pagini ale unui site web.
PHP declarațiile include și require (PHP include and require Statements)
Este posibil să inserați conținutul unui fișier PHP într-un alt fișier PHP (înainte ca serverul să îl execute), cu instrucțiunea include sau require.
Instrucțiunile include și require sunt identice, cu excepția eșecului:
require va produce o eroare fatală (E_COMPILE_ERROR) și va opri scriptul
include va produce doar un avertisment (E_WARNING) și scriptul va continua
Așadar, dacă doriți ca execuția să continue și să le arate utilizatorilor ieșirea (output), chiar dacă fișierul include lipsește, folosiți instrucțiunea include.
În caz contrar, în cazul FrameWork, CMS sau o codificare complexă a aplicației PHP, utilizați întotdeauna instrucțiunea require pentru a include un fișier cheie pentru fluxul de execuție. Acest lucru va ajuta la evitarea compromiterii securității și integrității aplicației dvs., doar în caz că lipsește accidental un fișier cheie (key file).
Inclusiv fișierele economisesc multă muncă. Aceasta înseamnă că puteți crea un antet, un subsol sau un fișier de meniu (header, footer sau menu file) pentru toate paginile dvs. web. Apoi, când antetul (header) trebuie actualizat, puteți actualiza doar antetul (header) include fișierul (include file).
Sintaxă
include 'filename'; sau require 'filename';
Exemple PHP include
Presupunem că avem un fișier de subsol standard (standard footer file) numit "footer.php", care arată astfel:
 <?php
echo "<p>Copyright &copy; 2020-" . date("Y") . " lectii-virtuale.ro</p>";
?>
Pentru a include fișierul de subsol (footer file) într-o pagină, utilizați instrucțiunea include:
<html>
<body>
<h1>Bine ați venit pe prima mea pagină!</h1>
<p>Un text.</p>
<p>Mai mult text.</p>
<?php include 'footer.php';?>
</body>
</html>
Presupunem că avem un fișier meniu standard (standard menu file) numit "menu.php":
<?php
echo '<a href="/default.asp">Home</a> -
<a href="/html/default.asp">Tutorial HTML</a> -
<a href="/css/default.asp">Tutorial CSS</a> -
<a href="/js/default.asp">Tutorial JavaScript</a> -
<a href="default.asp">Tutorial PHP</a>';
?>
Toate paginile de pe site-ul web ar trebui să folosească acest fișier meniu. Iată cum se poate face (folosim un element <div> pentru ca meniul să poată fi ușor stilat mai târziu cu CSS):
<html>
<body>
<div class="menu">
<?php include 'menu.php';?>
</div>
<h1>Bine ați venit pe prima mea pagină!</h1>
<p>Un text.</p>
<p>Mai mult text.</p>
</body>
</html>
Presupunem că avem un fișier numit "vars.php", cu cateva variabile definite:
<?php
$color='roșu';
$car='BMW';
?>
Apoi, dacă includem fișierul "vars.php", variabilele pot fi utilizate în fișierul apelant:
<html>
<body>
<h1>Bine ați venit pe prima mea pagină!</h1>
<?php include 'vars.php';
echo "Am o $color $car.";
?>
</body>
</html>
PHP include vs. require
Instrucțiunea require este de asemenea folosită pentru a include un fișier în codul PHP.
Cu toate acestea, există o mare diferență între include și require; când un fișier este inclus cu instrucțiunea include și PHP nu îl poate găsi, scriptul va continua să execute:
<html>
<body>
<h1>Bine ați venit pe prima mea pagină!</h1>
<?php include 'noFileExists.php';
echo "Am o $color $car.";
?>
</body>
</html>
Dacă facem același exemplu folosind instrucțiunea require, instrucțiunea echo nu va fi executată, deoarece execuția scriptului moare după ce instrucțiunea require a returnat o eroare fatală:
<html>
<body>
<h1>Bine ați venit pe prima mea pagină!</h1>
<?php require 'noFileExists.php';
echo "Am o $color $car.";
?>
</body>
</html>
Folosiți require când fișierul este solicitat de aplicație.
Folosiți include atunci când fișierul nu este necesar și aplicația ar trebui să continue atunci când fișierul nu este găsit.

PHP Fișierele Open/Read/Close

PHP Fișierele Open/Read/Close
În acest capitol vă vom învăța cum să deschideți, să citiți și să închideți (open, read și close) un fișier pe server.
PHP Open File - fopen()
O metodă mai bună de a deschide fișiere este cu funcția fopen(). Această funcție vă oferă mai multe opțiuni decât funcția readfile().
Vom folosi fișierul text, "webdictionary.txt", în timpul lecțiilor:
AJAX = JavaScript și XML asincron (Asynchronous JavaScript and XML)
CSS = Fișe de stil în cascadă (Cascading Style Sheets)
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Limbaj de interogare structurat (Structured Query Language)
SVG = Grafică vectorială scalabilă (Scalable Vector Graphics)
XML = Limbaj de marcare extinsă (EXtensible Markup Language)
Primul parametru al fopen() conține numele fișierului care trebuie deschis și al doilea parametru specifică în ce mod ar trebui să fie deschis fișierul. Următorul exemplu generează, de asemenea, un mesaj dacă funcția fopen() nu poate deschide fișierul specificat:
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Nu se poate deschide fișierul!");
echo fread($myfile,filesize("webdictionary.txt"));
fclose($myfile);
?>
Fișierul poate fi deschis într-unul din următoarele moduri:
r - Deschideți un fișier numai pentru citire. Indicatorul de fișiere începe de la începutul fișierului
w - Deschideți un fișier numai pentru scriere. Șterge conținutul fișierului sau creează un nou fișier dacă acesta nu există. Indicatorul de fișiere începe de la începutul fișierului
a - Deschideți un fișier numai pentru scriere. Datele existente în fișier sunt păstrate. Indicatorul fișierului începe la sfârșitul fișierului. Creează un nou fișier dacă fișierul nu există
x - Creează un nou fișier numai pentru scriere. Returnează FALSE și o eroare dacă fișierul există deja
r + - Deschideți un fișier pentru citire / scriere. Indicatorul de fișiere începe de la începutul fișierului
w + - Deschideți un fișier pentru citire / scriere. Șterge conținutul fișierului sau creează un nou fișier dacă acesta nu există. Indicatorul de fișiere începe de la începutul fișierului
a + - Deschideți un fișier pentru citire / scriere. Datele existente în fișier sunt păstrate. Indicatorul fișierului începe la sfârșitul fișierului. Creează un nou fișier dacă fișierul nu există
x + - Creează un nou fișier pentru citire / scriere. Returnează FALSE și o eroare dacă fișierul există deja
PHP Read File - fread()
Funcția fread() citește dintr-un fișier deschis.
Primul parametru al fread() conține numele fișierului din care trebuie citit și al doilea parametru specifică numărul maxim de octeți de citit.
Următorul cod PHP citește fișierul "webdictionary.txt" până la sfârșit:
fread($myfile,filesize("webdictionary.txt"));
PHP Close File - fclose()
Funcția fclose() este utilizată pentru a închide un fișier deschis.
Este o practică bună de programare pentru a închide toate fișierele după ce ați terminat cu ele. Nu doriți ca un fișier deschis să fie difuzat pe serverul dvs. preluând resurse!
fclose() necesită numele fișierului (sau o variabilă care deține numele fișierului) pe care dorim să o închidem:
<?php
$myfile = fopen("webdictionary.txt", "r");
// ceva cod care urmează să fie executat ....
fclose($myfile);
?>
PHP Read Single Line - fgets()
Funcția fgets() este utilizată pentru a citi o singură linie dintr-un fișier.
Exemplul de mai jos produce (outputs) prima linie a fișierului "webdictionary.txt":
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Nu se poate deschide fișierul!");
echo fgets($myfile);
fclose($myfile);
?>
După un apel la funcția fgets(), indicatorul de fișiere (file pointer) a trecut la linia următoare.
PHP Verifică sfârșitul fișierului - feof() (PHP Check End-Of-File - feof())
Funcția feof() verifică dacă s-a ajuns la „sfârșitul fișierului” (end-of-file) (EOF).
Funcția feof() este utilă pentru a bucla (looping) prin date de lungime necunoscută.
Exemplul de mai jos citește fișierul "webdictionary.txt" linie rând, până la sfârșitul fișierului (end-of-file):
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Nu se poate deschide fișierul!");
//  Ieșirea unei linii până la sfârșitul fișierului (end-of-file)
while(!feof($myfile)) {
  echo fgets($myfile) . "<br>";
}
fclose($myfile);
?>
PHP Read Single Character - fgetc()
Funcția fgetc() este utilizată pentru a citi un singur caracter dintr-un fișier.
Exemplul de mai jos citește fișierul "webdictionary.txt" caracter după caracter, până când se ajunge la sfârșitul fișierului (end-of-file):
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Nu se poate deschide fișierul!");
// Ieșirea unui caracter până la sfârșitul fișierului (end-of-file)
while(!feof($myfile)) {
  echo fgetc($myfile);
}
fclose($myfile);
?>
După un apel către funcția fgetc(), indicatorul de fișier (file pointer) se mută la următorul caracter.

PHP Cookies

Cookie-uri PHP (PHP Cookies)
Ce este un Cookie?
Un cookie este adesea folosit pentru a identifica un utilizator. Un cookie este un fișier mic pe care serverul îl încorporează pe computerul utilizatorului. De fiecare dată când același computer solicită o pagină cu un browser, va trimite și cookie-ul. Cu PHP, puteți crea și recupera valorile cookie.
Creați cookie-uri cu PHP
Un cookie este creat cu funcția setcookie().
Sintaxă
setcookie(name, value, expire, path, domain, secure, httponly);
Numai parametrul name este necesar. Toți ceilalți parametrii sunt opționali.
PHP Creare / Recuperare Cookie (PHP Create/Retrieve a Cookie)
Următorul exemplu creează un cookie numit „user” cu valoarea „Ion Popescu”. Cookie-ul va expira după 30 de zile (86400 * 30).
„/” înseamnă că cookie-ul este disponibil pe întregul site web (în caz contrar, selectați directorul preferat).
Vom prelua apoi valoarea „user” cookie-ului (folosind variabila globală $_COOKIE). De asemenea, folosim funcția isset() pentru a afla dacă cookie-ul este setat:
<?php
$cookie_name = "user";
$cookie_value = "Ion Popescu";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])) {
    echo "Cookie-ul numit" . $cookie_name . "' nu este setat!";
} else {
    echo "Cookie '" . $cookie_name . "' is set!<br>";
    echo "Valoarea este:" . $_COOKIE[$cookie_name];
}
?>
</body>
</html>
Funcția setcookie() trebuie să apară BEFORE de eticheta (tag) <html>.
Valoarea cookie-ului este codificată în mod automat la trimiterea cookie-ului și automat decodificată atunci când este primită (pentru a preveni codificarea URL-ului, utilizați în schimb setrawcookie()).
Modificați o valoare cookie
Pentru a modifica un cookie, trebuie doar să setați (din nou) modul cookie folosind funcția setcookie():
<?php
$cookie_name = "user";
$cookie_value = "Alex Ionescu";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])) {
    echo "Cookie-ul nimit'" . $cookie_name . "' nu este setat!";
} else {
    echo "Cookie'" . $cookie_name . "' este setat!<br>";
    echo "Valoarea este:" . $_COOKIE[$cookie_name];
}
?>
</body>
</html>
Ștergeți un cookie
Pentru a șterge un cookie, utilizați funcția setcookie() cu o dată de expirare din trecut:
<?php
// setați data de expirare la o oră în urmă
setcookie("user", "", time() - 3600);
?>
<html>
<body>
<?php
echo "Cookie 'user' este șters.";
?>
</body>
</html>
Verificați dacă cookie-urile sunt activate
Următorul exemplu creează un mic script care verifică dacă cookie-urile sunt activate. Mai întâi, încercați să creați un cookie de testare cu funcția setcookie(), apoi numărați variabila array $_COOKIE:
<?php
setcookie("test_cookie", "test", time() + 3600, '/');
?>
<html>
<body>
<?php
if(count($_COOKIE) > 0) {
    echo "Cookie-urile sunt activate.";
} else {
    echo "Cookie-urile sunt dezactivate.";
}
?>
</body>
</html>

PHP Sesiuni

Sesiuni PHP
O sesiune este o modalitate de a stoca informații (în variabile) pentru a fi utilizate în mai multe pagini.
Spre deosebire de un cookie, informațiile nu sunt stocate pe computerul utilizatorilor.
Ce este o sesiune PHP?
Când lucrați cu o aplicație, o deschideți, faceți unele modificări și apoi o închideți. Aceasta seamănă foarte mult cu o sesiune. Calculatorul știe cine ești. Știe când porniți aplicația și când terminați. Dar pe internet există o problemă: serverul web nu știe cine sunteți sau ce faceți, deoarece adresa HTTP nu menține starea.
Variabilele de sesiune (session variables) rezolvă această problemă prin stocarea informațiilor utilizatorului care vor fi utilizate pe mai multe pagini (de exemplu, numele de utilizator, culoarea preferată etc.). În mod implicit, variabilele de sesiune durează până când utilizatorul închide browserul.
Așa deci; Variabilele de sesiune (session variables) conțin informații despre un singur utilizator și sunt disponibile pentru toate paginile dintr-o singură aplicație.
Dacă aveți nevoie de o stocare permanentă, poate doriți să stocați datele într-o bază de date.
Porniți o sesiune PHP
O sesiune este pornită cu funcția session_start().
Variabilele de sesiune sunt setate cu variabila globală PHP: $_SESSION.
Acum, hai să creăm o nouă pagină numită "demo_session1.php". În această pagină, începem o nouă sesiune PHP și setăm câteva variabile de sesiune:
<?php
// Începeți sesiunea
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Setați variabile de sesiune
$_SESSION["favcolor"] = "green";
$_SESSION["favanimal"] = "cat";
echo "Variabilele de sesiune sunt setate.";
?>
</body>
</html>
Funcția session_start() trebuie să fie primul lucru din documentul dvs. Înainte de orice etichete HTML.
Obțineți valori variabile ale sesiunii PHP
În continuare, creem o altă pagină numită "demo_session2.php". Din această pagină, vom accesa informațiile de sesiune pe care le-am setat pe prima pagină („demo_session1.php”).
Observați că variabilele de sesiune nu sunt transmise individual la fiecare pagină nouă, ci sunt preluate din sesiunea pe care o deschidem la începutul fiecărei pagini (session_start()).
De asemenea, observați că toate valorile variabilei de sesiune sunt stocate în variabila globală $_SESSION:
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Variabilele de sesiune echo care au fost setate pe pagina anterioară
echo "Culoarea preferată este " . $_SESSION["favcolor"] . ".<br>";
echo "Animalul preferat este " . $_SESSION["favanimal"] . ".";
?>
</body>
</html>
Un alt mod de a arăta toate valorile variabilei de sesiune (session variable) pentru o sesiune de utilizator (user session ) este să executați următorul cod:
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
print_r($_SESSION);
?>
</body>
</html>
Cum functioneazã? De unde știe că sunt eu?
Majoritatea ședințelor setează o cheie de utilizator (user-key) pe computerul utilizatorului care arată așa: 765487cf34ert8dede5a562e4f3a7e12. Apoi, când o sesiune este deschisă pe o altă pagină, scanează computerul pentru o cheie de utilizator (user-key). Dacă există o potrivire, aceasta accesează sesiunea, dacă nu, începe o nouă sesiune.
Modificați o variabilă de sesiune PHP
Pentru a schimba o variabilă de sesiune, trebuie doar să o suprascrieți:
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// pentru a schimba o variabilă de sesiune, trebuie doar să o rescrieți
$_SESSION["favcolor"] = "yellow";
print_r($_SESSION);
?>
</body>
</html>
Distrugeți o sesiune PHP
Pentru a elimina toate variabilele globale ale sesiunii și a distruge sesiunea, utilizați session_unset() și session_destroy():
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// eliminați toate variabilele de sesiune
session_unset();
// distrugeți sesiunea
session_destroy();
?>
</body>
</html>

PHP Filtre

Filtre PHP
Validarea datelor = Determinați dacă datele sunt într-o formă corectă.
Sanitizarea datelor = Eliminați orice caracter ilegal din date.
Extensia de filtrare PHP
Filtrele PHP sunt utilizate pentru validarea și igienizarea intrărilor externe.
Extensia de filtru PHP are multe dintre funcțiile necesare pentru verificarea intrării utilizatorului (user input) și este concepută pentru a face validarea datelor mai ușoară și mai rapidă.
Funcția filter_list() poate fi utilizată pentru a enumera ce oferă extensia de filtru PHP:
<table>
  <tr>
    <td>Nume filtru</td>
    <td>ID filtru</td>
  </tr>
  <?php
  foreach (filter_list() as $id =>$filter) {
      echo '<tr><td>' . $filter . '</td><td>' . filter_id($filter) . '</td></tr>';
  }
  ?>
</table>
De ce să folosești filtrele?
Multe aplicații web primesc input extern. Intrarea/datele externe pot fi:
Intrarea utilizatorului dintr-un formular (User input from a form)
Cookies
Date despre servicii web (Web services data)
Variabilele serverului (Server variables)
Rezultatele interogării bazei de date (Database query results)
Ar trebui să validați întotdeauna datele externe!
Datele trimise nevalide pot duce la probleme de securitate și vă pot break pagina web!
Folosind filtre PHP puteți fi sigur că aplicația dvs. primește introducerea corectă!
Funcția PHP filter_var()
Funcția filter_var() validează și igienizează datele.
Funcția filter_var() filtrează o singură variabilă cu un filtru specificat. Este nevoie de două bucăți de date (pieces of data):
Variabila pe care doriți să o verificați
Tipul de verificare de utilizat
Sanitizarea unui string
Următorul exemplu utilizează funcția filter_var() pentru a elimina toate etichetele HTML dintr-un șir (string):
<?php
$str = "<h1>Hello World!</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING);
echo $newstr;
?>
Validarea unui număr întreg (integer)
Următorul exemplu utilizează funcția filter_var() pentru a verifica dacă variabila $int este un număr întreg (integer). Dacă $int este un număr întreg (integer), rezultatul codului de mai jos va fi: „Integer este valid”. Dacă $int nu este un număr întreg (integer), rezultatul va fi: „Integer nu este valid”:
<?php
$int = 100;
if (!filter_var($int, FILTER_VALIDATE_INT) === false) {
    echo("Integer este valid");
} else {
    echo("Integer nu este valid");
}
?>
filter_var() și Problema cu 0
În exemplul de mai sus, dacă $int a fost setat pe 0, funcția de mai sus va returna „Integer nu este valid”. Pentru a rezolva această problemă, utilizați codul de mai jos:
<?php
$int = 0;
if (filter_var($int, FILTER_VALIDATE_INT) === 0 || !filter_var($int, FILTER_VALIDATE_INT) === false) {
    echo("Integer este valid");
} else {
    echo("Integer nu este valid");
}
?>
Validați o adresă IP
Următorul exemplu utilizează funcția filter_var() pentru a verifica dacă variabila $ip este o adresă IP validă:
<?php
$ip = "127.0.0.1";
if (!filter_var($ip, FILTER_VALIDATE_IP) === false) {
    echo("$ip este o adresă IP validă");
} else {
    echo("$ip nu este o adresă IP validă");
}
?>
Sanitizarea și validarea unei adrese e-mail
Următorul exemplu utilizează funcția filter_var() pentru a elimina mai întâi toate caracterele ilegale din variabila $e-mail, apoi verificați dacă este o adresă e-mail validă:
<?php
$email = "[email protected]";
// Eliminați toate caracterele ilegale din e-mail
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
// Validați e-mail
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
    echo("$email este o adresă e-mail validă");
} else {
    echo("$email nu este o adresă e-mail validă");
}
?>
Sanitizarea și validarea unei adrese URL
Următorul exemplu utilizează funcția filter_var() pentru a elimina mai întâi toate caracterele ilegale dintr-o adresă URL, apoi verificați dacă $url este o adresă URL validă:
<?php
$url = "https://www.w3schools.com";
// Eliminați toate caracterele ilegale dintr-un URL
$url = filter_var($url, FILTER_SANITIZE_URL);
// Validați adresa URL
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
    echo("$url este o adresă URL validă");
} else {
    echo("$url nu este o adresă URL validă");
}
?>

PHP Filtre avansate

Filtre PHP avansate
Validați un număr întreg (integer) într-un interval
Următorul exemplu utilizează funcția filter_var() pentru a verifica dacă o variabilă este atât de tip INT, cât și între 1 și 200:
<?php
$int = 122;
$min = 1;
$max = 200;
if (filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range"=>$min, "max_range"=>$max))) === false) {
    echo("Valoarea variabilă nu se încadrează în intervalul legal");
} else {
    echo("Valoarea variabilă se încadrează în intervalul legal");
}
?>
Validați adresa IPv6
Următorul exemplu utilizează funcția filter_var() pentru a verifica dacă variabila $ip este o adresă IPv6 validă:
<?php
$ip = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";
if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
    echo("$ip este o adresă IPv6 validă");
} else {
    echo("$ip nu este o adresă IPv6 validă");
}
?>
Validați adresa URL - trebuie să conțină QueryString
Următorul exemplu utilizează funcția filter_var() pentru a verifica dacă variabila $url este o adresă URL cu un șir de interogare (querystring):
<?php
$url = "https://www.lectii-virtuale.ro";
if (!filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED) === false) {
    echo("$url este o adresă URL validă cu un șir de interogare (query string)");
} else {
    echo("$url nu este o adresă URL validă cu un șir de interogare (query string)");
}
?>
Eliminați caracterele cu valoarea ASCII>127
Următorul exemplu utilizează funcția filter_var() pentru igienizarea unui șir (string). Ambele vor elimina din șir (string) toate etichetele HTML și toate caracterele cu valoarea ASCII>127:
<?php
$str = "<h1>Hello WorldÆØÅ!</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
echo $newstr;
?>

PHP OOP - clase și obiecte

PHP OOP - clase și obiecte
O clasă este un șablon pentru obiecte (template for objects), iar un obiect este o instanță a clasei.
Cazul OOP
Să presupunem că avem o clasă numită Fruit. Un fruct poate avea proprietăți precum numele, culoarea, greutatea, etc (name, color, weight). Putem defini variabile precum $nume, $culoare și $greutate ($name, $color, and $weight) pentru a reține valorile acestor proprietăți.
Când sunt create obiectele individuale (măr, banană/apple, banana, etc.), moștenesc toate proprietățiile și comportamentele din clasă, dar fiecare obiect va avea valori diferite pentru proprietăți.
Definiți o clasă
O clasă este definită folosind cuvântul cheie al clasei (class keyword), urmată de numele clasei și de o pereche de acolade ({}). Toate proprietățiile și metodele sale se încadrează în acolade:
Sintaxă
<?php
class Fruit {
  // codul merge aici ...
?>
Mai jos declarăm o clasă numită Fruit compusă din două proprietăți ($nume și $culoare/$name and $color) și două metode set_name() și get_name() pentru setarea și obținerea proprietății $nume ($name):
<?php
class Fruit {
  // Proprietăți
  public $name;
  public $color;
 // Metode
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}
?>
Într-o clasă, variabilele se numesc proprietăți și funcțiile se numesc metode!
Definiți obiectele
Clasele nu sunt nimic fără obiecte! Putem crea mai multe obiecte dintr-o clasă. Fiecare obiect are toate proprietățiile și metodele definite în clasă, dar vor avea valori de proprietate (property values) diferite.
Obiectele unei clase sunt create folosind noul cuvânt cheie ( new keyword).
În exemplul de mai jos, $apple și $banana sunt exemple ale clasei Fruit:
<?php
class Fruit {
  // Proprietăți
  public $name;
  public $color;
 // Metode
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}
$apple = new Fruit();
$banana = new Fruit();
$apple->set_name('Apple');
$banana->set_name('Banana');
echo $apple->get_name();
echo "<br>";
echo $banana->get_name();
?>
În exemplul de mai jos, adăugăm încă două metode la clasa Fruit, pentru setarea și obținerea proprietății $color:
<?php
class Fruit {
  // Proprietăți
  public $name;
  public $color;
  // Metode
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
  function set_color($color) {
    $this->color = $color;
  }
  function get_color() {
    return $this->color;
  }
}
$apple = new Fruit();
$apple->set_name('Apple');
$apple->set_color('Red');
echo "Name: " . $apple->get_name();
echo "<br>";
echo "Color: " . $apple->get_color();
?>
PHP - Cuvântul cheie (Keyword) $this
Cuvântul cheie (Keyword) $this se referă la obiectul curent (current object) și este disponibil numai în cadrul metodelor.
Priviți următorul exemplu:
<?php
class Fruit {
  public $name;
}
$apple = new Fruit();
?>
Deci, unde putem schimba valoarea proprietății $name? Există două moduri:
În interiorul clasei (adăugând o metodă set_name() și utilizați $this):
<?php
class Fruit {
  public $name;
  function set_name($name) {
    $this->name = $name;
  }
}
$apple = new Fruit();
$apple->set_name("Apple");
?>
În afara clasei (modificând direct valoarea proprietății):
<?php
class Fruit {
  public $name;
}
$apple = new Fruit();
$apple->name = "Apple";
?>
PHP - instanceof
Puteți utiliza cuvântul cheie instanceof (instanceof keyword) pentru a verifica dacă un obiect aparține unei clase specifice:
<?php
$apple = new Fruit();
var_dump($apple instanceof Fruit);
?>

PHP MySQL Introduceți mai multe înregistrări

PHP MySQL Introduceți mai multe înregistrări
Inserați mai multe înregistrări în MySQL folosind MySQLi și PDO
Mai multe instrucțiuni SQL trebuie executate cu funcția mysqli_multi_query().
Următoarele exemple adaugă trei înregistrări noi în tabelul „MyGuests”:
Exemplu (MySQLi Orientat pe obiect/MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Creați conexiunea
$conn = new mysqli($servername, $username, $password, $dbname);
// Verificați conexiunea
if ($conn->connect_error) {
    die("Conexiunea a eșuat: " . $conn->connect_error);
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Ion', 'Popescu', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Maria', 'Gheorghe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Iulia', 'Filipescu', '[email protected]')";
if ($conn->multi_query($sql) === TRUE) {
    echo "Înregistrări noi create cu succes";
} else {
    echo "Eroare: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
Exemplu (MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Creați conexiunea
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Verificați conexiunea
if (!$conn) {
    die("Conexiunea a eșuat: " . mysqli_connect_error());
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Ion', 'Popescu', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Maria', 'Gheorghe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Iulia', 'Filipescu', '[email protected]')";
if (mysqli_multi_query($conn, $sql)) {
    echo "Înregistrări noi create cu succes";
} else {
    echo "Eroare: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
Exemplu (PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // setați modul de eroare PDO la excepție
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   // începeți tranzacția
    $conn->beginTransaction();
    // declarațiile noastre SQL
    $conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
    VALUES ('Ion', 'Popescu', '[email protected]')");
    $conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
    VALUES ('Maria', 'Gheorghe', '[email protected]')");
    $conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
    VALUES ('Iulia', 'Filipescu', '[email protected]')");
   // commit the transaction
    $conn->commit();
    echo "Înregistrări noi create cu succes";
    }
catch(PDOException $e)
    {
    // dați înapoi tranzacția dacă ceva a eșuat
    $conn->rollback();
    echo "Eroare: " . $e->getMessage();
    }
$conn = null;
?>

PHP MySQL Declarații pregătite

PHP MySQL Declarații pregătite
Declarațiile pregătite (prepared statements) sunt foarte utile împotriva injecțiilor SQL (SQL injections).
Declarații pregătite și parametri legați
O declarație pregătită (prepared statements) este o caracteristică utilizată pentru a executa aceleași (sau similare) instrucțiuni SQL cu o eficiență ridicată.
Declarațiile pregătite (prepared statements) funcționează astfel:
Pregătiți: Un șablon de instrucțiuni SQL (SQL statement template) este creat și trimis în baza de date. Anumite valori sunt lăsate nespecificate, numite parametri (etichetat (labeled ) "?"). Exemplu: INSERT INTO MyGuests VALUES(?, ?, ?)
Baza de date analizează, compilează și efectuează optimizarea interogării pe șablonul de instrucțiuni SQL (SQL statement template) și stochează rezultatul fără a-l executa
Executați: ulterior, aplicația leagă valorile la parametri, iar baza de date execută instrucțiunea. Aplicația poate executa instrucțiunea ori de câte ori dorește cu valori diferite
Față de executarea directă a instrucțiunilor SQL, instrucțiunile pregătite (prepared statements) au trei avantaje principale:
Instrucțiunile pregătite (prepared statements) reduc timpul de analiză (parsing time), deoarece pregătirea pe interogare se face o singură dată (deși instrucțiunea este executată de mai multe ori)
Parametrii legați (bound parameters) minimizează lățimea de bandă (bandwidth) către server, deoarece trebuie să trimiteți de fiecare dată doar parametrii și nu întreaga interogare (query)
Instrucțiunile pregătite (prepared statements) sunt foarte utile împotriva injecțiilor SQL (SQL injections), deoarece valorile parametrilor, care sunt transmise ulterior folosind un protocol diferit, nu trebuie eliberate corect (correctly escaped). Dacă șablonul de instrucțiune originală (original statement template) nu este derivat de la intrarea externă (external input), nu poate apărea injecția SQL (SQL injection).
Declarații pregătite în MySQLi (Prepared Statements in MySQLi)
Următorul exemplu utilizează instrucțiuni pregătite și parametri legați (prepared statements and bound parameters) în MySQLi:
Exemplu (MySQLi cu declarații pregătite/MySQLi with Prepared Statements)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Creați conexiunea
$conn = new mysqli($servername, $username, $password, $dbname);
// Verificați conexiunea
if ($conn->connect_error) {
    die("Conexiunea a eșuat: " . $conn->connect_error);
}
// pregătiți și legați
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
// setați parametrii și executați
$firstname = "Ion";
$lastname = "Popescu";
$email = "[email protected]";
$stmt->execute();
$firstname = "Maria";
$lastname = "Gheorghe";
$email = "[email protected]";
$stmt->execute();
$firstname = "Iulia";
$lastname = "Filipescu";
$email = "[email protected]";
$stmt->execute();
echo "Înregistrări noi create cu succes";
$stmt->close();
$conn->close();
?>
Linii de cod pentru a explica exemplul precedent:
"INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"
În SQL-ul nostru, introducem un semn de întrebare (?) unde vrem să înlocuim o valoare întreagă, string, dublă sau blob (integer, string, double or blob).
Apoi, aruncați o privire la funcția bind_param():
$stmt->bind_param("sss", $firstname, $lastname, $email);
Această funcție leagă parametrii la interogarea SQL (SQL query) și îi spune bazei de date care sunt parametrii. Argumentul „sss” listează tipurile de date (types of data) care sunt parametri. Caracterul s spune mysql-ului că parametrul este un șir (string).
Argumentul poate fi unul din următoarele patru tipuri:
i - număr întreg (integer)
d - dublu (double)
s - șir (string)
b - BLOB
Pentru fiecare parametru trebuie să avem una dintre acestea .
Spunând mysql-ului la ce tip de date (type of data) trebuie să se aștepte, reducem la minimum riscul de injecții SQL (SQL injections.).
Dacă dorim să introducem date din surse externe (cum ar fi intrarea utilizatorului (user input)), este foarte important ca datele să fie igienizate ( sanitized) și validate.
Declarații pregătite în PDO (Prepared Statements in PDO)
Următorul exemplu utilizează declarații pregătite și parametri legați (prepared statements and bound parameters) în PDO:
Exemplu (PDO cu declarații pregătite)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // setați modul de eroare PDO la excepție
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // pregătiți parametrii sql și bind
    $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
    VALUES (:firstname, :lastname, :email)");
    $stmt->bindParam(':firstname', $firstname);
    $stmt->bindParam(':lastname', $lastname);
    $stmt->bindParam(':email', $email);
    // introduceți un rând
    $firstname = "Ion";
    $lastname = "Popescu";
    $email = "[email protected]";
    $stmt->execute();
    // introduceți un alt rând
    $firstname = "Maria";
    $lastname = "Gheorghe";
    $email = "[email protected]";
    $stmt->execute();
    // introduceți un alt rând
    $firstname = "Iulia";
    $lastname = "Filipescu";
    $email = "[email protected]";
    $stmt->execute();
    echo "Înregistrări noi create cu succes";
    }
catch(PDOException $e)
    {
    echo "Eroare: " . $e->getMessage();
    }
$conn = null;
?>

PHP MySQL Select Data

PHP MySQL Select Data
Selectați datele dintr-o bază de date MySQL
Instrucțiunea SELECT este utilizată pentru a selecta datele dintr-una sau mai multe tabele:
SELECT column_name(s) FROM table_name
sau putem folosi caracterul * pentru a selecta TOATE coloanele dintr-un tabel:
SELECT * FROM table_name
Selectați date cu MySQLi
Selectați date cu MySQLi
Următorul exemplu selectează coloanele id, prenume și nume (id, firstname, lastname) din tabelul MyGuests și îl afișează pe pagină:
Exemplu (MySQLi Orientat pe obiect/MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Creați conexiunea
$conn = new mysqli($servername, $username, $password, $dbname);
// Verificați conexiunea
if ($conn->connect_error) {
    die("Conexiunea a eșuat: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    // date de ieșire ale fiecărui rând (output data of each row)
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>
Linii de cod pentru a explica exemplul de mai sus:
Mai întâi, am configurat o interogare SQL (SQL query) care selectează coloanele id, nume și prenume (id, firstname, lastname) din tabelul MyGuests. Următoarea linie de cod rulează interogarea (query) și pune datele rezultate într-o variabilă numită $result.
Apoi, funcția num_rows() verifică dacă au fost returnate mai mult de zero rânduri.
Dacă sunt returnate mai mult de zero rânduri, funcția fetch_assoc() plasează toate rezultatele într-un tablou asociativ (associative array) pe care îl putem bucla (loop). Bucla (loop) while() buclează setul de rezultate și emite datele din coloanele id, nume și prenume (id, firstname, lastname).
Următorul exemplu arată același lucru ca și exemplul precedent, în modul procedural MySQLi:
Exemplu (MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Creați conexiunea
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Verificați conexiunea
if (!$conn) {
    die("Conexiunea a eșuat: " . mysqli_connect_error());
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
    // date de ieșire ale fiecărui rând
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 results";
}
mysqli_close($conn);
?>
Puteți pune rezultatul într-un tabel HTML:
Exemplu (MySQLi Orientat pe obiect/MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Creați conexiunea
$conn = new mysqli($servername, $username, $password, $dbname);
// Verificați conexiunea
if ($conn->connect_error) {
    die("Conexiunea a eșuat: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    echo "<table><tr><th>ID</th><th>Nume</th></tr>";
    // date de ieșire ale fiecărui rând
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]." ".$row["lastname"]."</td></tr>";
    }
    echo "</table>";
} else {
    echo "0 results";
}
$conn->close();
?>
Selectați datele cu PDO (+ declarații pregătite/prepared statements)
Următorul exemplu folosește instrucțiuni pregătite (prepared statements).
Selectează coloanele id, prenume și nume (id, firstname, lastname) din tabelul MyGuests și îl afișează într-un tabel HTML:
Exemplu (PDO)
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Prenume</th><th>Nume</th></tr>";
class TableRows extends RecursiveIteratorIterator {
    function __construct($it) {
        parent::__construct($it, self::LEAVES_ONLY);
    }
    function current() {
        return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
    }
    function beginChildren() {
        echo "<tr>";
    }

    function endChildren() {
        echo "</tr>" . "\n";
    }
}
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests");
    $stmt->execute();
    // setați tabloul rezultat la asociativ (set the resulting array to associative)
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
    foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
        echo $v;
    }
}
catch(PDOException $e) {
    echo "Eroare: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>

PHP MySQL WHERE

PHP MySQL Utilizați clauza WHERE
Selectați și filtrați datele dintr-o bază de date MySQL
Clauza WHERE este folosită pentru a filtra înregistrările.
Clauza WHERE este utilizată pentru a extrage doar acele înregistrări care îndeplinesc o condiție specificată.
SELECT column_name(s) FROM table_name WHERE column_name operator value 
Selectați și filtrați datele cu MySQLi
Următorul exemplu selectează coloanele id, prenumele și numele (id, firstname, lastname) din tabelul MyGuests unde numele de familie (lastname) este "Popescu" și îl afișează pe pagina:
Exemplu (MySQLi Orientat pe obiect/MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Creați conexiunea
$conn = new mysqli($servername, $username, $password, $dbname);
// Verificați conexiunea
if ($conn->connect_error) {
    die("Conexiunea a eșuat: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests WHERE lastname='Popescu'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    // date de ieșire ale fiecărui rând
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Nume: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>
Linii de cod pentru a explica exemplul de mai sus:
Mai întâi, am configurat interogarea SQL (SQL query) care selectează coloanele id, prenumele și numele (id, firstname, lastname) din tabelul MyGuests unde numele de familie (lastname) este „Popescu”. Următoarea linie de cod rulează interogarea (query) și pune datele rezultate într-o variabilă numită $result.
Apoi, funcția num_rows() verifică dacă au fost returnate mai mult de zero rânduri.
Dacă sunt returnate mai mult de zero rânduri, funcția fetch_assoc() plasează toate rezultatele într-un tablou asociativ (associative array) pe care îl putem bucla (loop). Bucla (loop) while() buclează setul de rezultate și emite datele din coloanele id, nume și prenume (id, firstname, lastname).
Următorul exemplu arată același lucru ca și exemplul dprecedent, în modul procedural MySQLi:
Exemplu (MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Creați conexiunea
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Verificați conexiunea
if (!$conn) {
    die("Conexiunea a eșuat: " . mysqli_connect_error());
}
$sql = "SELECT id, firstname, lastname FROM MyGuests WHERE lastname='Popescu'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
    // date de ieșire ale fiecărui rând
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Nume: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 results";
}
mysqli_close($conn);
?>
Puteți pune rezultatul într-un tabel HTML:
Exemplu (MySQLi Orientat pe obiect/MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Creați conexiunea
$conn = new mysqli($servername, $username, $password, $dbname);
// Verificați conexiunea
if ($conn->connect_error) {
    die("Conexiunea a eșuat: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests WHERE lastname='Popescu'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    echo "<table><tr><th>ID</th><th>Nume</th></tr>";
    // date de ieșire ale fiecărui rând
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]." ".$row["lastname"]."</td></tr>";
    }
    echo "</table>";
} else {
    echo "0 results";
}
$conn->close();
?>
Selectați date cu PDO (+ declarații pregătite/prepared statements)
Următorul exemplu folosește instrucțiuni pregătite (prepared statements).
Selectează coloanele id, prenumele și numele (id, firstname, lastname) din tabelul MyGuests unde numele de familie este "Popescu" și îl afișează într-un tabel HTML:
Exemplu (PDO)
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Prenume</th><th>Nume</th></tr>";
class TableRows extends RecursiveIteratorIterator {
    function __construct($it) {
        parent::__construct($it, self::LEAVES_ONLY);
    }
    function current() {
        return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
    }
    function beginChildren() {
        echo "<tr>";
    }
    function endChildren() {
        echo "</tr>" . "\n";
    }
}
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests WHERE lastname='Popescu'");
    $stmt->execute();
    // setați tabloul rezultat la asociativ (set the resulting array to associative)
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
    foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
        echo $v;
    }
}
catch(PDOException $e) {
    echo "Eroare: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>

PHP MySQL ORDER BY

PHP MySQL Utilizați clauza ORDER BY
Selectați și comandați date dintr-o bază de date MySQL (Select and Order Data From a MySQL Database)
Clauza ORDER BY este folosită pentru a sorta setul de rezultate în ordine crescătoare sau descrescătoare.
Clauza ORDER BY sortează înregistrările în ordine crescătoare în mod implicit. Pentru a sorta înregistrările în ordine descrescătoare, utilizați cuvântul cheie DESC.
SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC 
Selectați și comandați date cu MySQLi (Select and Order Data With MySQLi)
Următorul exemplu selectează coloanele id, prenume și nume (id, firstname, lastname) din tabelul MyGuests. Înregistrările vor fi ordonate după coloana prenumelui:
Exemplu (MySQLi Orientat pe obiect/MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Creați conexiunea
$conn = new mysqli($servername, $username, $password, $dbname);
// Verificați conexiunea
if ($conn->connect_error) {
    die("Conexiunea a eșuat: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    // date de ieșire ale fiecărui rând
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Nume: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>
Linii de cod pentru a explica exemplul de mai sus:
În primul rând, am configurat interogarea SQL (SQL query) care selectează coloanele id, prenume și nume (id, firstname, lastname) din tabelul MyGuests. Înregistrările vor fi comandate de coloana cu numele de familie. Următoarea linie de cod rulează interogarea (query) și pune datele rezultate într-o variabilă numită $result.
Apoi, funcția num_rows() verifică dacă au fost returnate mai mult de zero rânduri.
Dacă sunt returnate mai mult de zero rânduri, funcția fetch_assoc() plasează toate rezultatele într-un tablou asociativ (associative array) pe care îl putem bucla (loop). Bucla (loop) while() buclează setul de rezultate și emite datele din coloanele id, prenume și nume (id, firstname, lastname).
Următorul exemplu arată același lucru ca și exemplul precedent, în modul procedural MySQLi:
Exemplu (MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Creați conexiunea
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Verificați conexiunea
if (!$conn) {
    die("Conexiunea a eșuat: " . mysqli_connect_error());
}
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
    // date de ieșire ale fiecărui rând
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Nume: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 results";
}
mysqli_close($conn);
?>
Puteți pune rezultatul într-un tabel HTML:
Exemplu (MySQLi Orientat pe obiect/MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Creați conexiunea
$conn = new mysqli($servername, $username, $password, $dbname);
// Verificați conexiunea
if ($conn->connect_error) {
    die("Conexiunea a eșuat: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    echo "<table><tr><th>ID</th><th>Nume</th></tr>";
    // date de ieșire ale fiecărui rând
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]." ".$row["lastname"]."</td></tr>";
    }
    echo "</table>";
} else {
    echo "0 results";
}
$conn->close();
?>
Selectați date cu PDO (+ declarații pregătite/prepared statements)
Următorul exemplu folosește instrucțiuni pregătite (prepared statements).
Aici selectăm coloanele id, prenume și nume (id, firstname, lastname) din tabelul MyGuests. Înregistrările vor fi ordonate după coloana cu numele de familie și vor fi afișate într-un tabel HTML:
Exemplu (PDO)
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Prenume</th><th>Nume</th></tr>";
class TableRows extends RecursiveIteratorIterator {
    function __construct($it) {
        parent::__construct($it, self::LEAVES_ONLY);
    }
    function current() {
        return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
    }
    function beginChildren() {
        echo "<tr>";
    }

    function endChildren() {
        echo "</tr>" . "\n";
    }
}
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname");
    $stmt->execute();
    // setați tabloul rezultat la asociativ (set the resulting array to associative)
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
    foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
        echo $v;
    }
}
catch(PDOException $e) {
    echo "Eroare: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>

PHP SimpleXML Parser

PHP SimpleXML Parser
SimpleXML este o extensie PHP care ne permite să manipulăm cu ușurință și să obținem date XML.
Parserul SimpleXML
SimpleXML este un analizator bazat pe arbori (tree-based parser).
SimpleXML oferă o modalitate ușoară de a obține numele, atributele și conținutul textului unui element (name, attributes and textual content), dacă știți structura sau aspectul (layout) documentului XML.
SimpleXML transformă un document XML într-o structură de date (data structure ) pe care o puteți repeta printr-o colecție de tablouri (collection of arrays) și obiecte.
În comparație cu DOM sau analizatorul (parser) Expat, SimpleXML ia mai puține linii de cod pentru a citi datele text dintr-un element.
Instalare
De la PHP 5, funcțiile SimpleXML fac parte din nucleul PHP. Nu este necesară instalarea pentru a utiliza aceste funcții.
PHP SimpleXML - Citiți din șir (string)
Funcția PHP simplexml_load_string() este utilizată pentru a citi datele XML dintr-un șir (string).
Presupunem că avem o variabilă care conține date XML, astfel:
$myXMLData =
"<?xml version='1.0' encoding='UTF-8'?>
<note>
<to>Popescu</to>
<from>Ioana</from>
<heading>Reminder</heading>
<body>Nu uitați de mine în acest weekend!</body>
</note>";
Exemplul de mai jos arată cum să utilizați funcția simplexml_load_string() pentru a citi datele XML dintr-un șir (string):
<?php
$myXMLData =
"<?xml version='1.0' encoding='UTF-8'?>
<note>
<to>Popescu</to>
<from>Ioana</from>
<heading>Reminder</heading>
<body>Nu uitați de mine în acest weekend!</body>
</note>";
$xml=simplexml_load_string($myXMLData) or die("Eroare: Nu se poate crea obiectul");
print_r($xml);
?>
Rezultatul codului de mai sus va fi:
SimpleXMLElement Object ( [to] => Popescu [from] => Ioana [heading] => Reminder [body] => Nu uitați de mine în acest weekend! )
Utilizați funcționalitatea libxml pentru a prelua toate erorile XML la încărcarea documentului și apoi repetați erorile.
Următorul exemplu încearcă să încarce un șir (string) XML rupt:
<?php
libxml_use_internal_errors(true);
$myXMLData =
"<?xml version='1.0' encoding='UTF-8'?>
<document>
<user>Ion Popescu</wronguser>
<email>[email protected]</wrongemail>
</document>";
$xml = simplexml_load_string($myXMLData);
if ($xml === false) {
    echo "Încărcarea XML a eșuat: ";
    foreach(libxml_get_errors() as $error) {
        echo "<br>", $error->message;
    }
} else {
    print_r($xml);
}
?>
Încărcarea XML a eșuat:
Nepotrivirea etichetelor de deschidere și incheiere (opening și ending) : linia de utilizator 3 și utilizator greșit (user line 3 and wronguser)
Nepotrivirea etichetelor de deschidere și incheiere (opening și ending): linia de e-mail 4 și e-mail greșit (email line 4 and wrongemail)
PHP SimpleXML - Citiți din fișier (Read From File)
Funcția PHP simplexml_load_file() este utilizată pentru a citi datele XML dintr-un fișier.
Presupunem că avem un fișier XML numit "note.xml", care arată astfel:
<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Popescu</to>
  <from>Ioana</from>
  <heading>Reminder</heading>
  <body>Nu uitați de mine în acest weekend!</body>
</note>
Exemplul de mai jos arată cum să utilizați funcția simplexml_load_file() pentru a citi datele XML dintr-un fișier:
<?php
$xml=simplexml_load_file("note.xml") or die("Eroare: Nu se poate crea obiectul");
print_r($xml);
?>
Rezultatul codului de mai sus va fi:
SimpleXMLElement Object ( [to] => Popescu [from] => Ioana [heading] => Reminder [body] => Nu uitați de mine în acest weekend! )
Capitolul următor arată cum să obțineți/recuperați valorile nodului (get/retrieve node values) dintr-un fișier XML cu SimpleXML!

PHP AJAX

PHP - AJAX și PHP
AJAX este utilizat pentru a crea mai multe aplicații interactive.
Exemplu AJAX PHP
Următorul exemplu va demonstra modul în care o pagină web poate comunica cu un server web în timp ce un utilizator tastează într-un câmp de intrare (input field).
Când un utilizator introduce un caracter în câmpul de intrare (input field), se execută o funcție numită "showHint()".
Funcția este declanșată de evenimentul onkeyup.
<html>
<head>
<script>
function showHint(str) {
    if (str.length == 0) {
        document.getElementById("txtHint").innerHTML = "";
        return;
    } else {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("txtHint").innerHTML = this.responseText;
            }
        };
        xmlhttp.open("GET", "gethint.php?q=" + str, true);
        xmlhttp.send();
    }
}
</script>
</head>
<body>
<p><b>Începeți să tastați un prenume în câmpul de introducere (input field) de mai jos:</b></p>
<form>
Prenume: <input type="text" onkeyup="showHint(this.value)">
</form>
<p>Sugestii: <span id="txtHint"></span></p>
</body>
</html>
Explicarea codului:
În primul rând, verificați dacă câmpul de intrare (input field) este gol (str.length == 0). Dacă este, ștergeți conținutul marcajului de substituție txtHint și ieșiți din funcție.
Cu toate acestea, dacă câmpul de intrare nu este gol, faceți următoarele:
Creați un obiect XMLHttpRequest
Creați funcția care trebuie executată atunci când răspunsul serverului este gata
Trimiteți cererea la un fișier PHP (gethint.php) de pe server
Observați că parametrul q este adăugat la url (gethint.php?q="+str)
Și variabila str conține conținutul câmpului de intrare (input field)
Fișierul PHP - "gethint.php"
Fișierul PHP verifică o serie de nume și returnează numele corespunzător browserului:
<?php
// Array with names
$a[] = "Ana";
$a[] = "Briana";
$a[] = "Cristina";
$a[] = "Diana";
$a[] = "Eva";
$a[] = "Florina";
$a[] = "Gina";
$a[] = "Helena";
$a[] = "Ina";
$a[] = "Jana";
$a[] = "Karina";
$a[] = "Liliana";
$a[] = "Nina";
$a[] = "Ofelia";
$a[] = "Petronela";
$a[] = "Alexandra";
$a[] = "Rahela";
$a[] = "Corina";
$a[] = "Dorina";
$a[] = "Evelina";
$a[] = "Emilia";
$a[] = "Sorina";
$a[] = "Tina";
$a[] = "Luana";
$a[] = "Violeta";
$a[] = "Lizuca";
$a[] = "Elizsabeta";
$a[] = "Eliana";
$a[] = "Wanda";
$a[] = "Victoria;
// obțineți parametrul q de la URL
$q = $_REQUEST["q"];
$hint = "";
// căutarea tuturor indiciilor din tablou (array) dacă $q este diferit de ""
if ($q !== "") {
    $q = strtolower($q);
    $len=strlen($q);
    foreach($a as $name) {
        if (stristr($q, substr($name, 0, $len))) {
            if ($hint === "") {
                $hint = $name;
            } else {
                $hint .= ", $name";
            }
        }
    }
}
// Ieșirea „fără sugestii” dacă nu a fost găsit niciun indiciu sau ieșirea valorilor corecte
echo $hint === "" ? "nici o sugestie" : $hint;
?>

PHP - AJAX Căutare live

PHP - AJAX Căutare live
AJAX poate fi utilizat pentru a crea căutări mai prietenoase și interactive pentru utilizator.
AJAX Căutare live
Următorul exemplu va demonstra o căutare live, unde obțineți rezultate de căutare în timp ce tastați.
Căutarea live are multe avantaje în comparație cu căutarea tradițională:
Rezultatele sunt afișate pe măsură ce tastați
Rezultatele se restrâng pe măsură ce continuați să scrieți
Dacă rezultatele devin prea restrânse, eliminați caracterele pentru a vedea un rezultat mai larg
Rezultatele se găsesc într-un fișier XML (de ex. links.xml). Pentru a face acest exemplu mic și simplu, sunt disponibile doar șase rezultate.
Exemplu explicat - Pagina HTML
Când un utilizator tastează un caracter în câmpul de intrare, funcția „showResult()” este executată. Funcția este declanșată de evenimentul "onkeyup":
<html>
<head>
<script>
function showResult(str) {
  if (str.length==0) {
    document.getElementById("livesearch").innerHTML="";
    document.getElementById("livesearch").style.border="0px";
    return;
  }
  if (window.XMLHttpRequest) {
    // cod pentru IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else {  // cod pentru IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (this.readyState==4 && this.status==200) {
      document.getElementById("livesearch").innerHTML=this.responseText;
      document.getElementById("livesearch").style.border="1px solid #A5ACB2";
    }
  }
  xmlhttp.open("GET","livesearch.php?q="+str,true);
  xmlhttp.send();
}
</script>
</head>
<body>
<form>
<input type="text" size="30" onkeyup="showResult(this.value)">
<div id="livesearch"></div>
</form>
</body>
</html>
Explicația codului sursă:
Dacă câmpul de intrare (input field) este gol (str.length == 0), funcția șterge conținutul marcatorului de căutare live (livesearch placeholder) și iese din funcție.
Dacă câmpul de intrare (input field) nu este gol, funcția showResult() execută următoarele:
Creați un obiect XMLHttpRequest
Creați funcția care trebuie executată atunci când răspunsul serverului este gata
Trimiteți cererea dezactivată unui fișier de pe server
Observați că la URL se adaugă un parametru (q) (cu conținutul câmpului de introducere (input field))
Fișierul PHP
Pagina de pe server numită de JavaScript-ul precedent este un fișier PHP numit "livesearch.php".
Codul sursă din „livesearch.php” caută un fișier XML pentru titluri care se potrivesc cu șirul de căutare (search string) și returnează rezultatul:
<?php
$xmlDoc=new DOMDocument();
$xmlDoc->load("links.xml");
$x=$xmlDoc->getElementsByTagName('link');
//obțineți parametrul q de la URL
$q=$_GET["q"];
//căutarea tuturor linkurilor din fișierul xml dacă lungimea lui q>0
if (strlen($q)>0) {
  $hint="";
  for($i=0; $i<($x->length); $i++) {
    $y=$x->item($i)->getElementsByTagName('title');
    $z=$x->item($i)->getElementsByTagName('url');
    if ($y->item(0)->nodeType==1) {
      //find a link matching the search text
      if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)) {
        if ($hint=="") {
          $hint="<a href='" .
          $z->item(0)->childNodes->item(0)->nodeValue .
          "' target='_blank'>" .
          $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
        } else {
          $hint=$hint . "<br /><a href='" .
          $z->item(0)->childNodes->item(0)->nodeValue .
          "' target='_blank'>" .
          $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
        }
      }
    }
  }
}
// Setați ieșirea la „nici o sugestie” dacă nu a fost găsit niciun indiciu
// sau la valorile corecte
if ($hint=="") {
  $response="nici o sugestie";
} else {
  $response=$hint;
}
//ieșire răspuns
echo $response;
?>
Dacă există un text trimis de la JavaScript (strlen($q)> 0), se întâmplă următoarele:
Încărcați un fișier XML într-un nou obiect XML DOM
Buclați-vă (Loop) prin toate elementele <title> pentru a găsi potriviri (matches) din textul trimis de JavaScript
Setează URL-ul și titlul corect în variabila „$response”. Dacă se găsesc mai multe potriviri (matches), toate potrivirile (matches) sunt adăugate la variabilă
Dacă nu se găsește nicio potrivire (matche), variabila „$response” este setată pe „fără sugestie”

AJAX Poll

PHP - Sondaj AJAX
Sondaj AJAX
Următorul exemplu va demonstra un sondaj în care rezultatul este afișat fără reîncărcare.
Exemplu explicat - Pagina HTML
Când un utilizator alege o opțiune, se execută o funcție numită "getVote()". Funcția este declanșată de evenimentul "onclick":
<html>
<head>
<script>
function getVote(int) {
  if (window.XMLHttpRequest) {
    // cod pentru IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else {  // cod pentru IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (this.readyState==4 && this.status==200) {
      document.getElementById("poll").innerHTML=this.responseText;
    }
  }
  xmlhttp.open("GET","poll_vote.php?vote="+int,true);
  xmlhttp.send();
}
</script>
</head>
<body>
<div id="poll">
<h3>Până acum vă plac PHP și AJAX?</h3>
<form>
Da:
<input type="radio" name="vote" value="0" onclick="getVote(this.value)">
<br>Nu:
<input type="radio" name="vote" value="1" onclick="getVote(this.value)">
</form>
</div>
</body>
</html>
Funcția getVote() face următoarele:
Creați un obiect XMLHttpRequest
Creați funcția care trebuie executată atunci când răspunsul serverului este gata
Trimiteți cererea dezactivată unui fișier de pe server
Observați că la URL se adaugă un parametru (vote) (cu valoarea opțiunii da sau nu)
Fișierul PHP
Pagina de pe server numită de JavaScript-ul precedent este un fișier PHP numit "poll_vote.php":
<?php
$vote = $_REQUEST['vote'];
//obțineți conținutul fișierului text (textfile)
$filename = "poll_result.txt";
$content = file($filename);
//puneți conținutul în tablou (array)
$array = explode("||", $content[0]);
$yes = $array[0];
$no = $array[1];
if ($vote == 0) {
  $yes = $yes + 1;
}
if ($vote == 1) {
  $no = $no + 1;
}
// introduceți voturi în fișierul txt (txt file)
$insertvote = $yes."||".$no;
$fp = fopen($filename,"w");
fputs($fp,$insertvote);
fclose($fp);
?>
<h2>Rezultat:</h2>
<table>
<tr>
<td>Da:</td>
<td>
<img src="poll.gif"
width='<?php echo(100*round($yes/($no+$yes),2)); ?>'
height='20'>
<?php echo(100*round($yes/($no+$yes),2)); ?>%
</td>
</tr>
<tr>
<td>Nu:</td>
<td>
<img src="poll.gif"
width='<?php echo(100*round($no/($no+$yes),2)); ?>'
height='20'>
<?php echo(100*round($no/($no+$yes),2)); ?>%
</td>
</tr>
</table>
Valoarea este trimisă de la JavaScript și se întâmplă următoarele:
Obțineți conținutul fișierului "poll_result.txt"
Puneți conținutul fișierului în variabile și adăugați unul la variabila selectată
Scrieți rezultatul în fișierul "poll_result.txt"
Prezentați o reprezentare grafică a rezultatului sondajului
Fișierul text
Fișierul text (poll_result.txt) este locul în care stocăm datele din sondaj.
Primul număr reprezintă voturile „Da”, al doilea număr reprezintă voturile „Nu”.
Nu uitați să permiteți serverului dvs. Web să editeze fișierul text. NU acorda acces tuturor, doar serverului web (PHP).

Acizi

Definirea acizilor conform teoriei disociației electrolitice și a teoriei protolitice; hidracizi și oxoacizi; radicali acizi; formula generală și nomenclatura acizilor; proprietățile și reacțiile chimice specifice acizilor; ionizarea acizilor; metode generale de obținere a acizilor. 

Baze

Definirea bazelor conform teoriei disociației electrolitice și teoriei protolitice; formula generală și nomenclatura bazelor; proprietățile și reacțiile chimice specifice bazelor; ionizarea bazelor; metode generale de obținere a bazelor. 

Săruri

Structura și formula generală a sărurilor; săruri neutre, săruri acide și săruri bazice; nomenclatura sărurilor; proprietățile și reacțiile chimice ale sărurilor; metode generale de obținere a sărurilor; neutralizare și hidroliză. 

Hidrogenul

Caracteristici generale ale hidrogenului; formarea ionului de hidrură, H-, și formarea ionului de hidrogen (proton), H+. Răspândirea hidrogenului în natură. Metode de preparare a hidrogenului. Proprietățile fizice și chimice ale hidrogenului. Hidruri. Ortohidrogen și parahidrogen. Hidrogenul atomic. Întrebuințările hidrogenului. Izotopii hidrogenului (protiu, deuteriu, tritiu). 

Apa

Răspândirea apei în natură. Purificarea apei - sedimentare, filtrare, sterilizare. Apele industriale. Distiliarea apei. Apa higroscopică. Proprietățile fizice ale apei. Structura moleculei de apă. Proprietățile chimice ale apei. Hidrați.  

Grupa 18 sau grupa a VIII-a principală

Grupa a VIII-a principală, numerotată VIII A sau 18, cuprinde gazele rare (nobile) heliu, He, neon, Ne, argon, Ar, kripton, Kr, xenon, Xe, radon, Rn. 

 

Grupa 17 sau grupa a VII-a principală

Grupa a VII-a principală, numerotată VII A sau 17, numită și grupa halogenilor, conține următoarele elemente: fluor, F, clor, Cl, brom, Br, iod, I, astatin, At.
 

Grupa 15 sau grupa a V-a principală

Grupa a V-a principală a sistemului periodic, numerotată V A sau 15, cuprinde următoarele elemente: azot, N, fosfor, P, arsen, As, stibiu (antimoniu), Sb, și bismut, Bi. 
 

Grupa 14 sau grupa a IV-a principală

Grupa a IV-a principală a sistemului periodic, numerotată IV A sau 14, cuprinde elementele carbon, C, siliciu, Si, germaniu, Ge, staniu, Sn, și plumb, Pb. 

Grupa 13 sau grupa a III-a principală

Grupa a III-a principală a sistemului periodic, numerotată III A sau 13, cuprinde elementele bor, B, aluminiu, Al, galiu, Ga, indiu, In, și taliu, Tl. 

Grupa 2 sau grupa a II-a principală

Grupa a II-a principală a sistemului periodic, numerotată II A sau 2, cuprinde elementele: beriliu, Be, magneziu, Mg, calciu, Ca, stronțiu, Sr, bariu, și radiu, Ra. Această grupă se mai numește grupa metalelor alcalino-pământoase. 

Elementele de tranziție

Structura electronică a elementelor de tranziție; caracteristicile chimice ale elementelor de tranziție. 

Grupa 4 sau grupa a IV-a secundară

Grupa a IV-a secundară a sistemului periodic, numerotată IV B sau 4, cuprinde elementele rare titan, Ti, zirconiu, Zr, și hafniu, Hf. 

Grupa 5 sau grupa a V-a secundară

Grupa a V-a secundară a sistemului periodic, numerotată V B sau 5, cuprinde elementele rare vanadiu, V, niobiu, Nb, și tantal, Ta.

Grupa 7 sau grupa a VII-a secundară

Grupa a VII-a secundară a sistemului periodic, numerotată VII B sau 7, cuprinde elementele mangan, Mn, technețiul, Tc, și reniu, Re. 

Grupa 10 sau grupa a VIII-a secundară

Grupa 10 a sistemului periodic, în trecut considerată parte a grupei a VIII-a secundare, alături de grupele 8 și 9, cuprinde elementele nichel, Ni, paladiu, Pd, și platină, Pt. 

Despre Lecții-Virtuale.ro

Lecții-Virtuale este o platformă educațională care oferă suport în vederea pregătirii pentru Evaluare Națională și Bacalaureat la Matematică, Fizică și Chimie. Lecțiile noastre sunt alcătuite din filme și exerciții și probleme cu tot cu rezolvări. Platforma noastră este o soluție ideală pentru școala online. Pentru facilitarea activității profesorilor în cadrul ecosistemului GSuite de la Google am implementat butonul Google Classroom. Scopul nostru este să ne concentrăm pe prezentarea noțiunilor și fenomenelor într-o manieră care să stimuleze înțelegerea și nu memorarea mecanică. Ne propunem să facilităm accesul la conținut educațional de calitate mai ales elevilor cu venituri mai modeste care nu își pemit meditații particulare. Sperăm să vă simțiti bine alături de noi și să invățați lucruri folositoare. Hai România!

Newsletter

Abonează-te la Newsletter pentru a fi la curent cu toate ofertele noastre.

Parteneri

EduApps partener Lectii Virtuale UiPath partener Lectii Virtuale Scoala365 partener Lectii Virtuale CCD Galați partener Lectii Virtuale

2024 © Lecții-virtuale.ro Toate drepturile rezervate
Termeni   Despre   Contact   Confidenţialitate   Cariere Parteneri