Va rugam dezactivati programul ad block pentru a vizualiza pagina!

Rezultate pentru tag: prim




Propagarea luminii. Reflexia si refracţia.

Propagarea luminii în medii omogene: constanţa vitezei şi conceptul de rază de lumină. Legile reflexiei şi refracţiei. Reflexia totală: definiţie, aplicaţii.

Calculul lentilelor. Sisteme de lentile.

Folosim formula Descartes pentru a calcula proprietăţile imaginii formate într-o lentilă. Prezentăm sistemele centrate şi acolate de lentile.

Microscopul. Ochiul uman.

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

Masă atomică. Izotopi. Mol de atomi

Masa atomică relativă medie. Compoziția procentuală a izotopilor în natură. Numărul lui Avogadro.

Noţiuni de cinematică.

Introducem noţiunile şi mărimile de bază ale cinematicii. Discutăm ecuaţia de mişcare. Prezentăm definiţia şi proprietăţile vectorilor.

Viteza şi acceleraţia.

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

Principiul I. Maşina termică.

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

Motoare termice.

Randamentul maşinii termice. Motoarele termice Otto şi Diesel.

Entropia. Principiul II.

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

Lichefierea, topirea. Diagrama de fază.

Izotermele Andrews ale gazului real. Lichefierea. Topirea şi solidificarea. Diagramele de fază. Punctul triplu.

Transformatorul. Alternatorul.

Transformatorul: raportul de transformare, randamentul. Maşini de curent alternativ. Alternatorul.

Ipotezele Planck şi Einstein.

Ipoteza Planck: cuantele de energie. Ipoteza Einstein: fotonul. Explicarea efectului fotoelectric cu formula Einstein şi modelul corpuscular.

Modelul atomic Bohr I.

Modelul atomic Bohr: condiţia de cuantificare, condiţia de echilibru. Cuantificarea razelor orbitelor.

Modelul atomic Bohr II.

Cuantificarea energiei. Numărul cuantic principal. Cuantificarea vitezei. Cuantificarea vitezei de rotaţie.

Structura învelișului electronic

Electroni. Înveliş electronic - straturi electronice, substraturi electronice, orbitali. Spin electronic.

Configurația electronică a elementelor din primele 3 perioade (Z 1-18)

Straturi electronice, substraturi electronice, orbitali. Spin electronic. Configurația electronică. Reguli de ocupare cu electroni a straturilor şi substraturilor. Principiul lui Pauli. Regula lui Hund.

Configurația electronică a elementelor din perioada a 4-a

Straturi electronice, substraturi electronice, orbitali, spin electronic. Configurația electronică a elementelor din perioada a patra. Diferenţa dintre configuraţia electronică şi ordinea de ocupare cu electroni. Principiul lui Pauli. Regula lui Hund.

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.

Variaţia energiei de ionizare

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

Legătura ionică. Compuşii ionici.

Regula octetului. Legături chimice. Cedare şi primire de electroni. Punere în comun de electroni. Compuşi ionici. Ioni pozitivi – cationi. Ioni negativi – anioni. Simboluri Lewis. Substanţe cristaline. Proprietăţile compuşilor ionici. 

Valenţa şi numărul de oxidare

Valența, covalența, electrovalența, numărul de oxidare. Electronii de valenţă. Reguli pentru determinarea numerelor de oxidare. Determinarea numerelor de oxidare în funcţie de electronegativitate. Valenţa şi poziţia în tabelul periodic.

Legea generală a gazelor

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

 

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. 

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. 

Celule electrochimice

Electrochimie. Celulă electrochimică. Elemente galvanice/voltaice. Conductori metalici şi electroliţi. Electrod, anod, catod. Semicelulă galvanică. Punte de sare. Procesele chimice care au loc la anod şi la catod. Simbolizarea unei celule electrochimice. Pile uscate/baterii. Pila Daniell.

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.

Numere prime între ele

Se numesc numere prime între ele acele numere naturale, diferite de zero, care au c.m.m.d.c. = 1.

Fracţii

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

Aducerea fracţiilor la acelaşi numitor

Aflarea numitorului comun a două sau mai multe fracții. Aducerea fracțiilor la același numitor.

Adunarea fracțiilor ordinare pozitive

Adunarea numerelor raționale pozitive reprezentate de fracții care au același numitor sau numitori diferiți.

Descompuneri în factori

Descompunerea în factori. Metode de descompunere în factori: metoda factorului comun, formule de calcul prescurtat și metode combinate.

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ă.

Sisteme de ecuaţii

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

Teorema catetei

Într-un triunghi dreptunghic, lungimea unei catete este medie proporțională între lungimea proiecției sale pe ipotenuză şi lungimea ipotenuzei.Teorema catetei și reciproca.

Teorema lui Pitagora

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

Alcani – nomenclatură, proprietăţi fizice, aplicaţii practice

Alcani, izoalcani. Metan, etan, propan, butan, izobutan. Izomerie de catenă. Serie omoloagă. Corelaţia dintre structura alcanilor şi proprietăţile fizice (starea de agregare, temperatura de fierbere).

Alchene – nomenclatură, proprietăţi fizice, aplicaţii practice

Serie omoloagă. Nomenclatură. Atomi de carbon vinilici şi atomi de carbon alilici. Caracteristicile legăturii duble. Izomerie geometrică (izomeri cis-trans). Izomerie de catenă. Izomerie de funcţiune. Izomerie de poziţie. Proprietăţi fizice

Alchine – nomenclatură, proprietăţi fizice

Caracteristicile legăturilor covalente triple. Nomenclatură. Izomerie de constituţie – izomerie de catenă şi izomerie de poziţie. Structura alchinelor. Proprietăţi fizice.

Alchine – proprietăţi chimice

Hidrogenarea acetilenei. Adiţia halogenilor. Adiţia apei. Tautomerizare. Adiţia hidracizilor. Dimerizarea şi trimerizarea acetilenei. Obţinerea vinilacetilenei şi a benzenului. Reacţii de substituţie.

Alcadiene – nomenclatură, proprietăţi fizice şi chimice

Nomenclatură. Clasificarea alcadienelor în funcţie de poziţia legăturilor duble în catenă. Adiţia hidrogenului. Adiţia halogenilor. Adiţia 1,2 şi adiţia 1,4. Reacţia de polimerizare. Reacţia de copolimerizare. Obţinerea butadienei şi a izoprenului. 

Arene – nomenclatură, clasificare şi proprietăţi fizice

Hidrocarburi aromatice. Structuri de rezonanţă (structuri limită). Benzenul. Modelul Kékulé. Structura inelului benzenic. Caracter aromatic. Clasificarea arenelor. Nomenclatură. Poziţiile orto-, meta-, şi para-. Proprietăţi fizice. 

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. 

Arene – adiţie la nucleul aromatic, reacţii la catena laterală

Reacţia de hidrogenare a benzenului, a naftalinei şi a antracenului. Reacţii caracteristice catenei laterale – halogenarea şi oxidarea. Poziţia benzilică. Oxidare blândă şi oxidare energică. 

Chimia carbonului – chimia organică

Carbonul – “elementul vieţii”. Diferenţa dintre compuşii organici şi compuşii anorganici. Obiectul de studiu al chimiei organice. Elemente organogene. Hidrocarburi. Compuşi organici cu funcţiuni.

Catene de atomi de carbon – clasificarea compuşilor organici

Compuşi organici saturaţi. Compuşi organici nesaturaţi. Atom de carbon primar, secundar, terţiar, cuaternar. Clasificarea compuşilor organici.

Structura compuşilor organici – formule moleculare şi formule structurale

Structură chimică. Analiza elementală. Determinarea formulei procentuale, a formulei brute şi a formulei moleculare (exemple de calcul). Formule structurale: formule de proiecţie, formule de proiecţie restrânse (plane). Izomerie. Izomeri geometrici (izomeri cis-trans). 

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 alchilare

Agenţi de alchilare. Alchilarea Friedel-Crafts. Alchilarea arenelor cu alchene. Alchilarea aminelor. Alchilări cu oxid de etenă. Obţinerea oxidului de etenă. Alchilarea aminelor cu oxid de etenă. Alchilarea alcoolilor cu oxid de etenă. 

Configuraţia enantiomerilor. Formule de perspectivă, formule Fischer

Formule de perspectivă. Formule de proiecţie Fischer. Configuraţia enantiomerilor. Sistemul R, S. Denumirea enantiomerilor reprezentaţi prin formule de perspectivă. Denumirea enantiomerilor reprezentaţi prin formule de proiecţie Fischer. 

Alcooli – metanol, etanol, glicerină.

Clasificarea compuşilor organici cu funcţiuni. Alcool. Grupa funcţională hidroxil. Nomenclatură. Clasificarea alcoolilor. Structură. Proprietăţi fizice. Metanol şi etanol – acţiune biologică. Obţinerea etanolului – fermentaţia alcoolică. Glicerina, trinitratul de glicerină. Dinamita şi Premiile Nobel.

Acizi carboxilici. Acidul acetic.

Caracteristicile şi structura grupei funcţionale carboxil. Obţinerea acidului acetic/oţetului de vin – fermentaţia acetică. Proprietăţile fizice şi chimice ale acidului acetic. Reacţia cu metale active, cu oxizi metalici, cu sărurile acidului carbonic şi cu hidroxizii alcalini. Reacţia de esterificare. 

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. 

Amine

Clasificarea şi nomenclatura aminelor. Caracteristicile grupei funcţionale amino. Proprietăţi fizice. Caracterul bazic al aminelor. Amine aromatice. Reacţii de substituţie. Reacţii de alchilare. Obţinerea sărurilor de arendiazoniu. Aplicaţii practice. 

Compuşi carbonilici

Grupa funcţională carbonil. Aldehide şi cetone. Nomenclatura aldehidelor. Nomenclatura cetonelor. Proprietăţi fizice. Reacţii de adiţie – adiţia hidrogenului. Reacţii de oxidare. Aplicaţii practice. 

Zaharide - Glucoza

Compuşi organici cu acţiune biologică. Compuşi cu mai multe grupe funcţionale. Zaharide – polihidroxialdehide şi polihidroxicetone. Monozaharide. Zaharide de policondensare. Glucoza. Structura zaharidelor. Proiecţii Fischer – notaţii D şi L. Atom de carbon asimetric. Importanţa biologică a glucozei. Aplicaţiile practice ale glucozei.

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 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.

Punct, dreaptă, plan.

Noțiuni primare de geometrie plană. Punct, dreaptă, semidreaptă, segment. Plan, semiplan.

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. 

Noţiuni de termochimie, partea II

Reacţii endoterme. Reacţii exoterme. Efecte termice: degajare de căldură, absorbţie de căldură. Căldura de reacţie. Condiţii standard de determinare a căldurii de reacţie.

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. 

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. 

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

Sisteme de ecuații simetrice

Ecuații simetrice. Sisteme de ecuații simetrice. Algoritmul de rezolvare a sistemelor simetrice. Sistem simetric fundamental.

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.

Operații logice: conjuncția

Conjuncția propozițiilor, conjuncția predicatelor. Intersecția mulțimilor. Valoarea de adevăr a conjuncției a două propoziții. Mulțimea de adevăr a conjuncției predicatelor.

Operații logice: disjuncția

Disjuncția propozițiilor, disjuncția predicatelor. Reuniunea mulțimilor. Valoarea de adevăr a disjuncției a două propoziții. Mulțimea de adevăr a disjuncției predicatelor.

Operații logice: implicația

Implicația propozițiilor. Ipoteză, concluzie. Implicația predicatelor. Incluziunea mulțimilor. Valoarea de adevăr a implicației. 

Operații logice: echivalența

Echivalența propozițiilor, echivalența predicatelor. Egalitatea mulțimilor. Valoarea de adevăr a echivalenței a două propoziții.

Progresii geometrice- noțiuni introductive

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

Proprietățile progresiei geometrice

Termenul general al unei progresii geometrice în funcție de primul termen și de rația progresiei. Condiția ca n numere să fie în progresie geometrică. Suma primilor n termeni ai unei progresii geometrice.

Adunarea vectorilor

Adunarea vectorilor: regula paralelogramului, regula triunghiului, regula poligonului. Proprietățile operației de adunare a vectorilor.

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.

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. 

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ă. 

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. 

Cercul trigonometric

Cerc trigonometric (cerc unitate). Exprimarea unghiurilor uzuale în grade și radiani și scrierea coordonatelor punctelor de pe cerc corespunzătoare.

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.

Î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.

Puncte de discontinuitate

Punct de discontinuitate de prima speţă, punct de discontinuitate de a doua speţă. 

Primitive. Integrala nedefinită a unei funcţii

Noţiunea de funcţie primitivă. Primitivele unei funcţii. Integrala nedefinită a unei funcţii.

Metoda integrării prin părţi

Metode de calcul ale primitivelor: formula de integrare prin părţi.

Formula lui Leibniz-Newton

Metode de calcul pentru integrala definită. Formula lui Leibniz-Newton.

Integrarea prin schimbare de variabilă (1)

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

Operaţii cu polinoame (2)

Înmulţirea polinoamelor scrise sub formă algebrică.

Taxa pe valoarea adăugată

Taxa pe valoarea adăugată. TVA.

TVA

Limite de șiruri exprimate prin sume

Limite de șiruri exprimate prin sume, exerciții rezolvate.

Introducere în HTML

HTML este limbajul marcant standard pentru crearea de pagini Web.
HTML reprezintă un început pentru realizarea site-urilor profesionale.
Declarația <! DOCTYPE html> definește acest document ca fiind HTML5.
Elementul <html> este elementul rădăcină al unei pagini HTML.
Elementul <head> conține meta informații despre document.
Elementul <titlu> specifică un titlu pentru document.
Elementul <body> conține conținutul paginii vizibile.
Elementul <h1> definește o rubrică mare.
Elementul <p> definește un alineat.

Elemente de bază HTML

Toate documentele HTML trebuie să înceapă cu o declarație de tip document: <! DOCTYPE html>.
Tag-urile utilizate sunt: <html> și </html>, <body> și </body>, <h1> la <h6>, 
<p> și </p>, <a> și </a>, <img>, <ul> și </ul>, <button> și </button>
 

Elemente HTML

Un element HTML constă, de obicei, dintr-o etichetă de început și o etichetă finală, cu conținutul introdus între ele.
Etichetele folosite sunt: <html> și </html>,<body> și </body> <p> și </p>, <h> și </h>, <br>, <br />.
 

Atribute HTML

Atributele oferă informații suplimentare despre elementele HTML.
Adresa de legătură este specificată în atributul href.
Numele de fișier al sursei imaginii este specificat în atributul src.
Atributele width și height, care specifică lățimea și înălțimea imaginii.
Atributul alt specifică un text alternativ care trebuie utilizat, dacă nu poate fi afișată o imagine.
Atributul style este utilizat pentru a specifica stilul unui element.
Limbajul este declarat cu atributul lang.
Atributul title este adaugat la elementul <p>.

Titluri HTML

Titlurile (headings) sunt definite cu etichete de la <h1> la <h6>.
Fiecare titlu (heading) HTML are o dimensiune implicită. Cu toate acestea, puteți specifica dimensiunea pentru orice titlu (heading) cu atributul style, folosind proprietatea CSS font-size.
Eticheta <hr> definește o pauză tematică într-o pagină HTML.
Elementul HTML <head> este un container pentru metadate.
Metadatele HTML sunt date despre documentul HTML.
Elementul <head> este plasat între eticheta <html> și eticheta <body>.
Vizualizarea codului sursă HTML se face cu View Page Source.
Inspectarea unui element HTML se face cu Inspect Element.

Element de imagine în HTML

Elementul de imagine ne permite să afișăm imagini diferite pentru diferite dispozitive sau dimensiuni de ecran.
Elementul HTML <picture>.
Elementul <picture> conține o serie de elemente <source>.
Elementul <img> este folosit de browserele care nu acceptă elementul <picture> sau dacă niciuna dintre etichetele <source> nu se potrivește.
Există două scopuri principale pentru elementul <picture>: Lățime de bandă (Bandwidth), Formatați suportul (Format Support).

Liste HTML

Elementele din listă pot conține alte elemente HTML
Utilizați elementul HTML <ul> pentru a defini o listă neordonată.
Utilizați proprietatea CSS list-style-type pentru a defini marcajul elementelor de listă.
Utilizați elementul HTML <ol> pentru a defini o listă ordonată.
Utilizați atributul HTML type pentru a defini tipul de numerotare.
Utilizați elementul HTML <li> pentru a defini un element de listă.
Utilizați elementul HTML <dl> pentru a defini o listă de descrieri.
Utilizați elementul HTML <dt> pentru a defini termenul de descriere.
Utilizați elementul HTML <dd> pentru a descrie termenul dintr-o listă de descrieri.
Listele pot fi amplasate în liste.
Elementele din listă pot conține alte elemente HTML.
Utilizați proprietatea CSS float: left sau display:inline pentru a afișa o listă pe orizontală.
Proprietatea CSS list-style-type este utilizată pentru a defini stilul marcajului articolului de listă:
disc - Setează marcajul elementului listei la un buletin (implicit).
circle - Setează marcajul elementului de listă într-un cerc.
square - Setează marcajul elementului de listă într-un pătrat.
none -  Elementele din listă nu vor fi marcate.

Atributul HTML class

Atributul HTML class este folosit pentru a defini stiluri egale pentru elemente cu același nume de clasă.
Atributul HTML class poate fi folosit și pe elementele inline.
În CSS, pentru a selecta elemente cu o anumită clasă, scrieți un caracter (.), urmat de numele clasei.
Atributul class poate fi folosit pe orice element HTML.
Numele clasei este sensibil la litere mari și mici!
Elementele HTML pot avea mai mult de un nume de clasă, fiecare nume de clasă trebuie separat printr-un spațiu.
Etichetele diferite pot împărtăși aceeași clasă.
Etichetele diferite, cum ar fi <h2> și <p>, pot avea același nume de clasă și, prin urmare, au același stil.
Utilizarea atributului class în JavaScript.
JavaScript poate accesa elemente cu un nume de clasă specificat folosind metoda getElementsByClassName ().

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. 

HTML Responsive Web Design

Responsive Web Design vizează utilizarea HTML-ului și CSS-ului pentru redimensionarea, ascunderea, micșorarea sau mărirea unui site web automat, pentru a-l arăta bine pe toate dispozitivele (desktop-uri, tablete și telefoane).
Setarea Viewport. Când creați pagini web responsive, adăugați următorul element <meta> în toate paginile dvs. web.
Imaginile responsive sunt imagini care se dimensionează frumos pentru a se potrivi cu orice dimensiune a browserului.
Utilizarea proprietății lățime (width).
Utilizarea proprietății cu lățimea maximă (max-width).
Elementul HTML <picture> vă permite să definiți imagini diferite pentru dimensiuni diferite ale ferestrei browserului.
Responsive Text Size. Mărimea textului poate fi setată cu o unitate „vw”, ceea ce înseamnă „lățimea vizualizării” (viewport width).
Pe lângă redimensionarea textului și a imaginilor, este de asemenea obișnuit să folosești interogări media în paginile responsive web.
Cu interogări media, puteți defini stiluri complet diferite pentru diferite dimensiuni de browser.
O pagină Responsive Web ar trebui să arate bine pe ecrane desktop mari și pe telefoane mobile mici.
Există multe CSS Frameworks care oferă un Responsive Design.
O modalitate excelentă de a crea un Responsive Design este de a utiliza o responsive style sheet.
Un alt framework popular este Bootstrap, folosește HTML, CSS și jQuery pentru a face pagini web responsive.



 

Codare HTML (seturi de caractere)

Pentru a afișa corect o pagină HTML, un browser web trebuie să știe ce set de caractere să folosească.
ASCII a fost primul standard de codare a caracterelor (numit și set de caractere). 
ISO-8859-1 a fost setul de caractere implicit pentru HTML 4
ANSI (Windows-1252) a fost setul de caractere Windows original. 
UTF-8 (Unicode) acoperă aproape toate caracterele și simbolurile din lume.
Setul de caractere implicit pentru HTML5 este UTF-8.
Atributul HTML charset.
Pentru a afișa corect o pagină HTML, un browser web trebuie să cunoască setul de caractere utilizat în pagină.
Acest lucru este specificat în eticheta <meta>.

HTML și XHTML

XHTML este HTML scris ca XML.
XHTML înseamnă limbaj de extindere HyperText Markup Language
XHTML este aproape identic cu HTML
XHTML este mai strict decât HTML
XHTML este HTML definit ca o aplicație XML
XHTML este acceptat de toate browserele principale

Elemente de formulare HTML

<form> Definește un formular HTML pentru introducerea utilizatorului.
Cel mai important element de formă este elementul <input>.
Elementul <input> poate fi afișat în mai multe moduri, în funcție de atributul type.
Dacă atributul type este omis, câmpul de intrare primește tipul implicit: "text".
Elementul <select> definește o listă derulantă (drop-down list).
Elementul  <option> definește o opțiune care poate fi selectată.
Utilizați atributul size pentru a specifica numărul de valori vizibile.
Utilizați atributul multiple pentru a permite utilizatorului să selecteze mai multe valori.
Elementul <textarea> definește un câmp de introducere pe mai multe linii (o zonă de text).
Atributul rows specifică numărul vizibil de linii dintr-o zonă de text.
Atributul cols specifică lățimea vizibilă a unei zone de text.
Elementul <button> definește un buton pe care se poate face click.
Elementul <datalist> specifică o listă de opțiuni predefinite pentru un element <input>.
Utilizatorii vor vedea o listă derulantă (drop-down list) a opțiunilor predefinite pe măsură ce introduc date.
Atributul listei elementului <input>, trebuie să se refere la atributul id al elementului <datalist>.
Elementul <output> reprezintă rezultatul unui calcul (ca unul realizat de un script).
<form> Definește un formular HTML pentru introducerea utilizatorului
<input> Definește un control de intrare
<textarea> Definește un control de intrare multilin (zona text)
<label> Definește o etichetă pentru un element <input>
<fieldset> Grupează elemente conexe într-o formă
<legend> Definește o legendă pentru un element <fieldset>
<select> Definește o listă derulantă
<optgroup> Definește un grup de opțiuni conexe dintr-o listă derulantă
<option> Definește o opțiune dintr-o listă derulantă
<button> Definește un buton pe care se poate face clic
<datalist> Specifică o listă de opțiuni predefinite pentru controale de intrare
<output> Definește rezultatul unui calcul

HTML Tipuri Input

Acest capitol descrie diferitele tipuri de intrare pentru elementul <input>.
Diferite tipuri de intrare pe care le puteți utiliza în HTML:<input type="button">, <input type="checkbox">, <input type="color">,
<input type="date">, <input type="datetime-local">, <input type="email">, <input type="file">, <input type="hidden">
<input type="image">, <input type="month">, <input type="number">, <input type="password">, <input type="radio">
<input type="range">, <input type="reset">, <input type="search">, <input type="submit">, <input type="tel">
<input type="text">, <input type="time">, <input type="url">, <input type="week">.
HTML5 a adăugat mai multe tipuri noi de intrare: color, date, datetime-local, email, month, number, range, search, tel, time, url, week.
Restricții de intrare: checked, disabled, max, maxlength, min, pattern, readonly, required, size, step, value.
<input type = ""> Specifică tipul de intrare de afișat.

HTML Atribute Input

Atributul value specifică valoarea inițială pentru un câmp de intrare.
Atributul readonly specifică faptul că un câmp de intrare este doar citit (nu poate fi modificat).
Atributul disabled specifică faptul că un câmp de intrare este dezactivat.
Atributul size specifică dimensiunea (în caractere) pentru câmpul de intrare.
Atributul maxlength specifică lungimea maximă permisă pentru câmpul de intrare.
Restricțiile de intrare nu sunt ignorate, iar JavaScript oferă multe modalități de a adăuga input-uri ilegale.
HTML5 a adăugat următoarele atribute pentru <input>: autocomplete, autofocus, form, formaction, formenctype, formmethod,
formnovalidate, formtarget, height and width, list, min and max, multiple, pattern (regexp), placeholder, required, step
și următoarele atribute pentru <form>: autocomplete, novalidate.
Atributul formaction este utilizat cu type="submit" și type="image".
Atributul formenctype este utilizat cu type = "submit" și type = "image".
Atributul formmethod poate fi utilizat cu type = "submit" și type = "image".
Atributul step funcționează cu următoarele tipuri de intrare (input types): number, range, date, datetime-local, month, time și week.
Atributul pattern funcționează cu următoarele tipuri de intrare (input types): text, search, url, tel, email, și password.
Utilizați atributul global title pentru a descrie pattern-ul care să ajute utilizatorul.
Atributul placeholder funcționează cu următoarele tipuri de intrare (input types): text, search, url, tel, email, și password.
Atributul required funcționează cu următoarele tipuri de intrare (input types): text, search, url, tel, email, password, date pickers, number, checkbox, radio, și file.
Atributul multiple funcționează cu următoarele tipuri de intrare (input types): e-mail și file.
Atributele min și max funcționează cu următoarele tipuri de intrare (input types): number, range, date, datetime-local, month, time și week.
Atributul list se referă la un element <datalist> care conține opțiuni predefinite pentru un element <input>.
Atributele înălțime și lățime (height și width) specifică înălțimea și lățimea unui element <input type = "image">.
Atributul formnovalidate poate fi utilizat cu type="submit".
Atributul formtarget înlocuiește atributul țintă (target) al elementului <form>.
Atributul formtarget poate fi utilizat cu type = "submit" și type = "image".
Atributul novalidate este un atribut <form>.
Atributul autocomplete funcționează cu <form> și următoarele tipuri <input>:text, search, url, tel, email, password, datepickers, range, și color.

Introducere în HTML5

WHATWG a dorit să dezvolte HTML ca un „standard de viață”. Un nivel de viață este mereu actualizat și îmbunătățit. Se pot adăuga noi funcții, dar funcționalitățile vechi nu pot fi eliminate.
Declarația DOCTYPE pentru HTML5.
Declarația de codare a caracterelor (charset).
Codificarea implicită a caracterelor în HTML5 este UTF-8.
Elementesemantice noi precum: <header>, <footer>, <article> și <section>.
Atribute ale elementelor de formular noi, cum ar fi: number, date, time, calendar, și range.
Elemente grafice noi: <svg> și <canvas>.
Elemente multimedia noi: <audio> și <video>.
Cele mai interesante API-uri noi în HTML5 sunt: HTML Geolocation, HTML Drag and Drop, HTML Local Storage, HTML Application Cache, HTML Web Workers, HTML SSE.
Următoarele elemente HTML4 au fost eliminate în HTML5: <acronym>, <applet>, <basefont>, <big>, <center>, <dir>, <font>, <frame>, <frameset>, 
<noframes>, <strike>, <tt>.
Folosiți în schimb: <abbr>, <object>, CSS, <ul>, <s>, <del>.

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).
 

HTML SVG

SVG înseamnă grafică vectorială scalabilă.
SVG este utilizat pentru a defini grafica pentru Web.
SVG este o recomandare W3C.
Elementul HTML <svg> este un container pentru grafică SVG.
SVG are mai multe metode pentru desenarea căilor, casetelor, cercurilor, textului și imaginilor grafice.
Diferențele dintre SVG și Canvas
SVG este un limbaj pentru descrierea graficelor 2D în XML.
Canvas desenează grafică 2D, pe fugă (cu un JavaScript).
SVG este bazat pe XML, ceea ce înseamnă că fiecare element este disponibil în DOM SVG. Puteți atașa manipulatoare de evenimente JavaScript (JavaScript event handlers) pentru un element.
În SVG, fiecare formă desenată este amintită ca obiect. Dacă se schimbă atributele unui obiect SVG, browserul poate reda automat forma.
Canvas: Rezoluție dependentă. Fără suport pentru organizatorii de evenimente.Capacități slabe de redare a textului. Puteți salva imaginea rezultată ca .png sau .jpg. Bine potrivit pentru jocuri cu intensitate grafică.
SVG: Rezoluție independentă. Suport pentru operatorii de evenimente. Cel mai potrivit pentru aplicații cu zone de redare mari (Google Maps). Redarea lentă, dacă este complexă (orice lucru care utilizează mult DOM va fi lent). Nu este potrivit pentru aplicații de joc.

HTML Media

Multimedia pe web inseamnă sunet, muzică, videoclipuri, filme și animații.
Exemple: imagini, muzică, sunet, videoclipuri, înregistrări, filme, animații și multe altele.
Paginile web conțin adesea elemente multimedia de diferite tipuri și formate.
Primele browsere web au avut suport doar pentru text, limitat la un singur font într-o singură culoare.
Mai târziu au venit browserele cu suport pentru culori și fonturi și imagini!
Formatele audio, video și animație au fost gestionate diferit de majoritatea browserelor. Diferite formate au fost acceptate, iar unele formate necesită programe auxiliare suplimentare (plug-in-uri) pentru a funcționa.
Sperăm că acest lucru va deveni istorie. Multimedia HTML5 promite un viitor mai ușor pentru multimedia.
Elementele multimedia (cum ar fi audio sau video) sunt stocate în fișiere media.
Cea mai obișnuită modalitate de a descoperi tipul de fișier este de a privi extensia de fișier.
Fișierele multimedia au formate și extensii diferite precum: .swf, .wav, .mp3, .mp4, .mpg, .wmv și .avi.
MP4 este noul și următorul format pentru video pe internet.
MP4 este recomandat de YouTube.
MP4 este acceptat de Flash Players.
MP4 este acceptat de HTML5.
Doar videoclipurile MP4, WebM și Ogg sunt acceptate de standardul HTML5.
MP3 este cel mai nou format pentru muzică înregistrată comprimat. Termenul MP3 a devenit sinonim cu muzica digitală.
Dacă site-ul dvs. web este despre muzică înregistrată, MP3 este alegerea.
Doar MP3, WAV și Ogg audio sunt acceptate de standardul HTML5.

HTML5 Video

Redarea videoclipurilor în HTML
Înainte de HTML5, un videoclip putea fi redat doar într-un browser cu un plug-in (precum flash).
Elementul HTML5 <video> specifică un mod standard de a încorpora un videoclip într-o pagină web.
Pentru a afișa un videoclip în HTML, utilizați elementul <video>.
Atributul de control (controls) adaugă controale video, cum ar fi: redare, pauză și volum.
Este o idee bună să includeți întotdeauna atributele de lățime și înălțime (width și height). Dacă nu sunt setate înălțimea și lățimea (width și height), pagina ar putea clipi în timp ce video-ul se încarcă.
Elementul <source> vă permite să specificați fișiere video alternative din care browserul poate alege. Browserul va folosi primul format recunoscut.
Textul dintre etichetele <video> și </video> va fi afișat numai în browserele care nu acceptă elementul <video>.
Pentru a începe un videoclip automat, utilizați atributul autoplay.
Atributul de redare automată (autoplay) nu funcționează pe dispozitive mobile precum iPad și iPhone.
În HTML5, există 3 formate video acceptate: MP4, WebM și Ogg.
HTML5 definește metodele, proprietățile și evenimentele DOM pentru elementul <video>.
Acest lucru vă permite să încărcați, să redați și să întrerupeți videoclipuri, precum și să setați durata și volumul.
<video> Definește un videoclip sau un film
<source> Definește mai multe resurse media pentru elemente media, cum ar fi <video> și <audio>
<track> Definește piesele text în playerele media

HTML5 Audio

Înainte de HTML5, fișierele audio puteau fi redate doar într-un browser cu un plug-in (cum ar fi flash).
Elementul HTML5 <audio> specifică un mod standard de a încorpora un audio într-o pagină web.
Pentru a reda un fișier audio în HTML, utilizați elementul <audio>:
Atributul de control (controls) adaugă controale audio, cum ar fi redare, pauză și volum.
Elementul <source> vă permite să specificați fișiere audio alternative din care browserul poate alege. Browserul va folosi primul format recunoscut.
Textul dintre etichetele <audio> și </audio> va fi afișat numai în browserele care nu acceptă elementul <audio>.
În HTML5, există 3 formate audio acceptate: MP3, WAV și OGG.
HTML5 definește metodele, proprietățile și evenimentele DOM pentru elementul <audio>.
Acest lucru vă permite să încărcați, să redați și să întrerupeți un fișier audio, precum și să setați durata și volumul.
Există, de asemenea, evenimente DOM care vă pot notifica atunci când un audio începe să se redea, este în pauză etc.
<source> - Definește multiple resurse media pentru elemente media, cum ar fi video și audio.

HTML APIs

API Geolocalizare HTML este utilizat pentru a localiza poziția unui utilizator.
Localizați Poziția Utilizatorului
API Geolocalizare în HTML este utilizat pentru a obține poziția geografică a unui utilizator.
Deoarece acest lucru poate compromite confidențialitatea, poziția nu este disponibilă decât dacă utilizatorul o aprobă.
Geolocalizarea este cea mai precisă pentru dispozitivele cu GPS, cum ar fi smartphone-ul.
Începând cu Chrome 5.0, API-ul de geolocalizare va funcționa numai pe contexte sigure, cum ar fi HTTPS. Dacă site-ul dvs. este găzduit pe o origine nesigură (cum ar fi HTTP), solicitările pentru a obține locația utilizatorilor nu vor mai funcționa.
Utilizarea geolocalizării în HTML
Metoda getCurrentPosition () este utilizată pentru a returna poziția utilizatorului.
Al doilea parametru al metodei getCurrentPosition () este utilizat pentru a gestiona erorile. Specifică o funcție care trebuie executată dacă nu reușește să obțină locația utilizatorului:
Pentru a afișa rezultatul într-o hartă, aveți nevoie de acces la un serviciu de hartă, cum ar fi Google Maps.
Geolocalizarea este de asemenea foarte utilă pentru informații specifice locației, cum ar fi:
Informații locale actualizate.
Afișare Puncte de interes în apropierea utilizatorului.
Navigare rotativă (GPS).
Metoda getCurrentPosition () returnează un obiect de succes. Proprietățile de latitudine, longitudine și precizie sunt întotdeauna returnate. Celelalte proprietăți sunt returnate dacă sunt disponibile:
coords.latitude -  Latitudinea ca număr zecimal (întors întotdeauna)
coords.longitude - Longitudinea ca număr zecimal (întors întotdeauna)
coords.acuratetă - Precizia poziției (întoarsă întotdeauna)
coords.altitude - Altitudinea în metri peste nivelul mării medii (returnat dacă este disponibil)
coords.altitude - Accarity Precizia altitudinii de poziție (returnată dacă este disponibilă)
coords.heading - Titlul ca grade în sensul acelor de ceasornic dinspre nord (returnat dacă este disponibil)
coords.speed - Viteza în metri pe secundă (returnată dacă este disponibilă)
timestamp -  Data / ora răspunsului (returnat dacă este disponibil)
Obiect de geolocalizare - Alte metode interesante
watchPosition () - returnează poziția actuală a utilizatorului și continuă să returneze poziția actualizată pe măsură ce utilizatorul se mișcă (precum GPS-ul într-o mașină).
clearWatch () - Oprește metoda watchPosition ().

HTML5 Drag and Drop

Drag and drop este o caracteristică foarte comună. Este atunci când „apucați” un obiect și îl trageți într-o altă locație.
În HTML5, drag and drop face parte din standard: Orice element poate fi tras.
Pentru a face un element care poate fi trasat, setați atributul dragable pe true
Atributul ondragstart apelează o funcție, drag (eveniment), care specifică ce date trebuie să fie trasate.
Metoda dataTransfer.setData () stabilește tipul de date și valoarea datelor trase.
Evenimentul ondragover specifică unde pot fi eliminate datele trase.
În mod implicit, datele / elementele nu pot fi abandonate în alte elemente. Pentru a permite o eliminare, trebuie să prevenim manipularea implicită a elementului.
Acest lucru se realizează prin apelarea metodei event.preventDefault () pentru evenimentul ondragover.
Atunci când datele glisate sunt abandonate, apare un eveniment drop.
Atributul ondrop apelează o funcție, drop(eveniment).
Call preventDefault() - pentru a preveni gestionarea implicită a datelor browserului (implicit este deschis ca link in drop)
Obțineți datele trase cu metoda dataTransfer.getData (). Această metodă va returna orice date care au fost setate la același tip în metoda setData()
Datele trase sunt id-ul elementului tras ("drag1")
Adăugați elementul tras în elementul drop.

Stocare Web în HTML5

Stocare web în HTML - mai bine decât cookie-urile.
Cu stocarea web, aplicațiile web pot stoca datele local în browserul utilizatorului.
Stocarea web este mai sigură și cantități mari de date pot fi stocate local, fără a afecta performanța site-ului web.
Spre deosebire de cookie-uri, limita de stocare este mult mai mare (cel puțin 5 MB) și informațiile nu sunt transferate niciodată pe server.
Stocarea web este pe origine (pe domeniu și protocol). Toate paginile, de la o origine, pot stoca și accesa aceleași date.
Obiecte de stocare Web în HTML
Stocarea web în HTML furnizează două obiecte pentru stocarea datelor pe client:
window.localStorage - stochează date fără dată de expirare.
window.sessionStorage - stochează datele pentru o sesiune (datele se pierd la închiderea filei browserului).
Înainte de a utiliza stocarea web, verificați asistența browserului pentru localStorage și sessionStorage.
Obiectul localStorage stochează datele fără data de expirare. Datele nu vor fi șterse atunci când browserul este închis și vor fi disponibile a doua zi, săptămână sau an.
Perechile nume / valoare sunt întotdeauna stocate ca șiruri. Nu uitați să le convertiți în alt format atunci când este nevoie!
Obiectul sessionStorage este egal cu obiectul localStorage, cu excepția faptului că stochează datele pentru o singură sesiune. Datele sunt șterse atunci când utilizatorul închide fila browserului specific.
 

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.

Evenimente trimise de server în HTML5

Evenimentele trimise de server permit unei pagini web să primească actualizări de la un server.
Evenimente trimise de server - mesagerie unidirecțională.
Un eveniment trimis de server este atunci când o pagină web primește automat actualizări de la un server.
Acest lucru era posibil și înainte, dar pagina web ar trebui să întrebe dacă există actualizări disponibile. Cu evenimente trimise de server, actualizările vin automat.
Obiectul EventSource este utilizat pentru a primi notificări de evenimente trimise de server.
Creați un nou obiect EventSource și specificați adresa URL a paginii care trimite actualizările (în acest exemplu "demo_sse.php").
De fiecare dată când se primește o actualizare, apare evenimentul onmessage.
Când are loc un eveniment onmessage, introduceți datele primite în elementul cu id = "result".
Verificați asistența pentru evenimente trimise de server

Aveți nevoie de un server capabil să trimită actualizări de date (cum ar fi PHP sau ASP).
Sintaxa fluxului de evenimente din partea serverului este simplă. Setați antetul „Content-Type” la „text / stream-event”. Acum puteți începe să trimiteți fluxuri de evenimente.
Setați antetul „Content-Type” la „text / stream-event”.
Specificați că pagina nu ar trebui să fie în cache.
Afișați datele care trebuie trimise (începeți întotdeauna cu „date:”).
Curățați datele de ieșire înapoi pe pagina web.
Evenimentul onmessage pentru a primi mesaje.
Alte evenimente:
onopen - Când se deschide o conexiune la server.
onmessage - Când un mesaj este primit.
onerror - Când apare o eroare.

CSS Text

Proprietatea de culoare este utilizată pentru a seta culoarea textului. Culoarea este specificată de:
un nume de culoare - ca „roșu”
o valoare HEX - ca „# ff0000”
o valoare RGB - ca „rgb (255,0,0)”
Consultați CSS Color Values pentru o listă completă a valorilor de culoare posibile.
Culoarea implicită a textului pentru o pagină este definită în selectorul body.
Aliniere text (Text Alignment).
Proprietatea text-align este utilizată pentru a seta alinierea orizontală a unui text.
Un text poate fi aliniat la stânga sau la dreapta, centrat sau justificat (left sau right, centered sau justified).
Când proprietatea de aliniere a textului este „justify”, fiecare linie este întinsă astfel încât fiecare linie să aibă lățimea egală, iar marginile stânga și dreapta sunt drepte (ca în reviste și ziare).
Decorarea textului (Text Decoration).
Proprietatea text-decoration este utilizată pentru a seta sau elimina decorațiunile din text.
Valoarea text-decoration: none; este adesea folosit pentru a elimina sublinierile din link-uri.
Nu este recomandat să subliniați textul care nu este o legătură, deoarece acest lucru încurcă cititorul.
Transformarea textului.
Proprietatea text-transform este utilizată pentru a specifica litere mari și minuscule (uppercase sau lowercase) într-un text.
Poate fi folosit pentru a transforma totul în litere mari sau minuscule (uppercase sau lowercase) sau pentru a valorifica prima literă a fiecărui cuvânt.
Indentare text (Text Indentation).
Proprietatea text-indent este utilizată pentru a specifica indentarea primei linii a unui text.
Spațiul dintre litere (Letter Spacing)
Proprietatea de spațiere a literelor (letter-spacing) este utilizată pentru a specifica spațiul dintre caracterele unui text.
Înălţimea liniei (Line Height).
Proprietatea line-height este utilizată pentru a specifica spațiul dintre linii.
Direcția textului (Text Direction).
Proprietatea direction este utilizată pentru a schimba direcția textului unui element.
Distanțarea cuvintelor (Word Spacing)
Proprietatea word-spacing a cuvintelor este utilizată pentru a specifica spațiul dintre cuvintele dintr-un text.
color - Setează culoarea textului.
direction -  Specifică direcția textului / direcția de scriere.
letter-spacing - Crește sau scade spațiul dintre caractere dintr-un text.
line-height - Setează înălțimea liniei.
text-align - Specifică alinierea orizontală a textului.
text-decoration - Specifică decorația adăugată la text.
text-indent - Specifică indentarea primei linii dintr-un bloc de text.
text-shadow - Specifică efectul umbre adăugat textului.
text-transform - Controlează capitalizarea textului.
text-overflow - Specifică modul în care conținutul revărsat care nu este afișat trebuie semnalat utilizatorului.
unicode-bidi - Se folosește împreună cu proprietatea de direcție pentru a seta sau returna dacă textul ar trebui să fie anulat pentru a accepta mai multe limbi din același document.
vertical-align - Setează alinierea verticală a unui element.
white-space - Specifică modul în care este gestionat spațiul alb din interiorul unui element.
word-spacing - Crește sau scade spațiul dintre cuvinte dintr-un text.

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 Position

CSS Layout -  Proprietatea position
Proprietatea position specifică tipul metodei de poziționare utilizate pentru un element (static, relativ, fix, absolut sau lipicios/static, relative, fixed, absolute sau sticky).
Elementele sunt apoi poziționate folosind proprietățiile de sus, de jos, de stânga și de dreapta (top, bottom, left, și right). Cu toate acestea, aceste proprietăți nu vor funcționa decât dacă proprietatea position este setată prima. De asemenea, funcționează diferit în funcție de valoarea poziției.
position: static; (poziție: static)
Elementele HTML sunt poziționate static în mod implicit.
Elementele poziționate static nu sunt afectate de proprietățile de sus, de jos, de stânga și de dreapta.
Un element cu position: static; (poziție: static) nu este poziționat într-un mod special; este poziționat întotdeauna în funcție de fluxul normal al paginii.
Element cu position: relative; (poziție: relativă;)
Un element cu position: relative; (poziție: relativă;) este poziționat în raport cu poziția normală.
Setarea proprietățiilor de sus, dreapta, jos și stânga a unui element relativ poziționat (relatively-positioned element) va face ca acesta să fie ajustat departe de poziția normală. Alt conținut nu va fi ajustat pentru a se încadra în niciun spațiu lăsat de element.
Elementul cu position: fixed; (poziție: fix;)
Un element cu position: fixed; (poziție: fix;) este poziționat în raport cu afișajul, ceea ce înseamnă că acesta rămâne întotdeauna în același loc, chiar dacă pagina este defilată. Proprietățile de sus, dreapta, jos și stânga sunt utilizate pentru poziționarea elementului.
Un element fix nu lasă un gol în pagina în care ar fi fost localizat în mod normal.
Elementul cu position: absolute; (poziție: absolută;)
Un element cu position: absolute; (poziție: absolută;) este poziționat în raport cu strămoșul cel mai apropiat poziționat (în loc de poziționat în raport cu vitrina, ca fix).
In orice caz; dacă un element poziționat absolut nu are strămoși poziționați, acesta folosește corpul documentului și se deplasează împreună cu derularea paginii.
Un element „poziționat” este unul a cărui poziție este orice, cu excepția staticii.
Elementul cu position: sticky; (poziție: lipicios;)
Un element cu position: sticky; (poziție: lipicios;) este poziționat în funcție de poziția de derulare a utilizatorului.
Un element lipicios (sticky) trece între relativ și fix, în funcție de poziția de defilare. Este poziționat relativ până când o poziție de offset dată este întâlnită în vitrină - apoi se „lipeste” în loc (ca poziția: fix).
Internet Explorer, Edge 15 și versiunile anterioare nu acceptă poziționarea sticky. Safari necesită un prefix -webkit- (vezi exemplul de mai jos). De asemenea, trebuie să specificați cel puțin una de sus, dreapta, jos sau stânga pentru ca poziționarea sticky să funcționeze.
În acest exemplu, elementul sticky se lipește în partea de sus a paginii (sus: 0), când atingeți poziția de defilare.
Elemente suprapuse (Overlapping Elements)
Când elementele sunt poziționate, se pot suprapune altor elemente.
Proprietatea indexului z specifică ordinea stivei unui element (care element trebuie plasat în fața sau în spatele celorlalte).
Un element poate avea o comandă a stivei pozitivă sau negativă.
Un element cu o ordine de stivă mai mare este întotdeauna în fața unui element cu o ordine de stivă mai mică.
Dacă două elemente poziționate se suprapun fără z - index specificat, elementul poziționat ultimul în codul HTML va fi afișat în partea de sus.
Poziționarea textului într-o imagine
Cum să poziționați textul peste o imagine.
Toate proprietățiile de poziționare CSS: bottom, clip, left, position, top, right, z-index. 
bottom - Setează marginea inferioară a marginii pentru o casetă poziționată
clip - Clipsează un element absolut poziționat
left - Setează marginea din stânga pentru o cutie poziționată
position - Specifică tipul de poziționare pentru un element
right - Setează marginea din dreapta pentru o cutie poziționată
top - Setează marginea superioară a marginii pentru o casetă poziționată
z-index - Setează ordinea stivei unui element

CSS Pseudo-clase

Ce sunt Pseudo-clasele?
O pseudo-clasă este utilizată pentru a defini o stare specială a unui element.
De exemplu, poate fi folosit pentru:
Stilează un element atunci când un utilizator trece cu mouseul peste el.
Stileaza linkurile vizitate și nevizitate diferit.
Stilează un element când se focusează.
Pseudo-clase ancorare
Linkurile pot fi afișate în diferite moduri.
a: hover TREBUIE să vină după  a:link și a:visited în definiția CSS pentru a fi eficiente! a: active TREBUIE să vină după a:hover în definiția CSS pentru a fi eficient! Numele pseudo-class nu sunt case-sensitive.
Pseudo-clase și clase CSS
Pseudo-clasele pot fi combinate cu clase CSS.
Hover pe <div>
Simple Tooltip Hover
Hover peste un element <div> pentru a afișa un element <p> (cum ar fi un tooltip).
Pseudo-clasa CSS - :first-child
Pseudo-clasa :first-child se potrivește cu un element specificat care este primul copil al unui alt element.
Potriviți primul element <p>.
Potriviți primul element <i> din toate elementele <p>.
Potriviți toate elementele <i> din toate elementele primului copil <p>.
Pseudo-clasa CSS - :lang
Pseudo-clasa CSS - :lang vă permite să definiți reguli speciale pentru diferite limbi.
:lang definește ghilimele pentru elementele <q> cu lang = "no".
Toate clasele CSS Pseudo. Toate elementele CSS  Pseudo.

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 Opacitate / Transparență

Proprietatea opacity specifică opacitatea / transparența unui element.
Imagine transparentă
Proprietatea opacity poate lua o valoare între 0,0 și 1,0. Cu cât valoarea este mai mică, cu atât mai transparentă.
IE8 și utilizarea anterioară filter:alpha(opacity=x). X poate lua o valoare de la 0 la 100. O valoare mai mică face ca elementul să fie mai transparent.
Efectul Hover transparent
Proprietatea de opacitate este adesea folosită împreună cu: hover selector pentru a modifica opacitatea cu mouse-over.
Transparent Box
Când se utilizează proprietatea opacity pentru a adăuga transparență pe fundalul unui element, toate elementele sale copil moștenesc aceeași transparență. Acest lucru poate face textul într-un element complet transparent, greu de citit.
Transparență folosind RGBA
Dacă nu doriți să aplicați opacitate elementelor copil, folosiți valorile de culoare RGBA.
Ați aflat de la capitolul nostru de culori CSS, că puteți utiliza RGB ca valoare a culorii. În plus față de RGB, puteți utiliza o valoare a culorii RGB cu un canal alfa (RGBA) - care specifică opacitatea unei culori.
O valoare de culoare RGBA este specificată cu: rgba (roșu, verde, albastru, alfa). Parametrul alfa este un număr între 0,0 (complet transparent) și 1,0 (complet opac).
Text în Transparent Box.

CSS Unități

Unități CSS
CSS are mai multe unități diferite pentru exprimarea unei lungimi.
Multe proprietăți CSS iau valori „de lungime” (lenght), cum ar fi lățimea, marja, căptușirea, dimensiunea fontului etc (width, margin, padding, font-size).
Lungimea este un număr urmat de o unitate de lungime, cum ar fi 10px, 2em etc.
Un whitespace nu poate apărea între număr și unitate. Cu toate acestea, dacă valoarea este 0, unitatea poate fi omisă.
Pentru unele proprietăți CSS, lungimile negative sunt permise.
Există două tipuri de unități de lungime: absolută și relativă.
Lungimi absolute (Absolute Lengths)
Unitățile de lungime absolută sunt fixe și o lungime exprimată în oricare dintre acestea va apărea exact ca acea dimensiune.
Unitățile de lungime absolută nu sunt recomandate pentru utilizare pe ecran, deoarece dimensiunile ecranului diferă atât de mult. Cu toate acestea, pot fi utilizate dacă este cunoscut suportul de ieșire, cum ar fi pentru aspectul tipăririi.
cm  -   centimetri
mm -   millimetri
in  -  inci (1in = 96px = 2.54cm)
px *  -  pixeli (1px = 1/96th of 1in)
pt  -  puncte (1pt = 1/72 of 1in)
pc  -  picas (1pc = 12 pt)
* Pixelii (px) sunt în raport cu dispozitivul de vizualizare. Pentru dispozitivele cu valoare redusă, 1px este un pixel de dispozitiv (punct) al afișajului. Pentru imprimante și ecrane de înaltă rezoluție, 1px implică mai mulți pixeli de dispozitiv.
Lungimi relative (Relative Lengths)
Unitățile de lungime relativă specifică o lungime relativă la o altă proprietate lungime. Unitățile de lungime relativă scalează mai bine între diferite medii de redare.
em - În raport cu dimensiunea fontului elementului (2em înseamnă de 2 ori dimensiunea fontului curent)
ex - În raport cu înălțimea x a fontului curent (rar folosit)
ch - În raport cu lățimea "0" (zero)
rem - Relativ la dimensiunea fontului elementului rădăcină
vw - În raport cu 1% din lățimea afișajului *
vh - În raport cu 1% din înălțimea viewport *
vmin - În raport cu 1% din dimensiunea mai mică a portofoliului *
vmax - În raport cu 1% din dimensiunea mai mare a portofoliului
% - În raport cu elementul părinte
Unitățile em și rem sunt practice în crearea unui aspect scalabil perfect!
* Viewport = dimensiunea ferestrei browserului. Dacă viewport are 50cm lățime, 1vw = 0,5cm.
Asistență browser (Browser Support)
Numerele din tabel specifică prima versiune a browserului care acceptă integral unitatea de lungime.

CSS Specificitate

Specificitatea CSS
Dacă există două sau mai multe reguli CSS conflictuale care indică același element, browserul respectă câteva reguli pentru a determina care este cea mai specifică și, prin urmare, câștigă.
Gândiți-vă la specificitate ca punctaj / rang care determină ce declarații de stil sunt aplicate unui element în cele din urmă.
Selectorul universal (*) are specificitate scăzută, în timp ce selectoarele ID sunt foarte specifice!
Specificitatea este un motiv comun pentru care regulile CSS nu se aplică anumitor elemente, deși credeți că ar trebui.
Ierarhia specificității (Specificity Hierarchy)
Fiecare selector își are locul în ierarhia specificității. Există patru categorii care definesc nivelul de specificitate al unui selector:
Stiluri în linie (Inline styles) - Un stil inline este atașat direct la elementul care urmează să fie stilat. Exemplu: <h1 style = "color: #ffffff;">.
ID-uri (IDs) - Un ID este un identificator unic pentru elementele paginii, cum ar fi  #navbar.
Clase, atribute și pseudo-clase - Această categorie include .classes, [attributes] and pseudo-classes, cum ar fi :hover, :focus etc.
Elemente și pseudo-elemente - Această categorie include nume de elemente și pseudo-elemente, cum ar fi h1, div, :before și :after.
Cum se calculează specificitatea?
Memorează cum să calculezi specificitatea!
Începeți de la 0, adăugați 1000 pentru atributul style, adăugați 100 pentru fiecare ID, adăugați 10 pentru fiecare atribut, clasă sau pseudo-clasă, adăugați 1 pentru fiecare nume de element sau pseudo-element.
Specificitatea lui A este 1 (un element)
Specificitatea lui B este 101 (o referință ID și un element)
Specificitatea C este 1000 (stil în linie)
De la 1 <101 <1000, a treia regulă (C) are un nivel mai mare de specificitate și, prin urmare, va fi aplicată.
Reguli de specificitate (Specificity Rules)
Specificitate egală: ultima regulă contează - Dacă aceeași regulă este scrisă de două ori în foaia de stil externă (external style sheet), atunci regula inferioară din foaia de stil (style sheet) este mai aproape de elementul care trebuie stilizat și, prin urmare, va fi aplicată.
Ultima regulă este întotdeauna aplicată.
Selectoarele ID au o specificitate mai mare decât selectoarele de atribute.
Prima regulă este mai specifică decât celelalte două și va fi aplicată.
Selectoarele contextuale sunt mai specifice decât un singur selector de elemente - Foaia de stil încorporată este mai aproape de elementul care urmează să fie stilat.
Ultima normă va fi aplicată.
Un selector de clasă bate orice număr de selectori de elemente - un selector de clase, cum ar fi .intro beats h1, p, div, etc.
Selectorul universal și valorile moștenite au o specificitate de 0 - *, body * și similare au o specificitate zero. Valorile moștenite au, de asemenea, o specificitate de 0.

CSS Colțuri rotunjite

CSS Colțuri rotunjite
Cu proprietatea CSS border-radius, puteți da oricărui element "colțuri rotunjite" (rounded corners).
Proprietate CSS border-radius
Proprietatea CSS border-radius definește raza colțurilor unui element.
Această proprietate vă permite să adăugați colțuri rotunjite la elemente!
Colțuri rotunjite (rounded corners) pentru un element cu o culoare de fundal specificată.
Colțuri rotunjite (rounded corners) pentru un element cu bordură.
Colțuri rotunjite (rounded corners) pentru un element cu o imagine de fundal.
Proprietatea „border-radius” este de fapt o proprietate de tip shorthand pentru proprietățiile border-top-left-radius, border-top-right-radius, border-bottom-right-radius și border-bottom-left-radius.
CSS border-radius - Specificați fiecare colț
Proprietatea border-radius poate avea de la una până la patru valori.
Patru valori - border-radius: 15px 50px 30px 5px; (prima valoare se aplică colțului din stânga sus(top-left corner), a doua valoare se aplică colțului din dreapta sus(top-right corner), a treia valoare se aplică colțului din dreapta jos(bottom-right corner) și a patra valoare se aplică colțului din stânga jos(bottom-left corner)).
Trei valori - border-radius: 15px 50px 30px; (prima valoare se aplică colțului din stânga sus(top-left corner), a doua valoare se aplică colțurilor din dreapta sus și din stânga jos(top-right și bottom-left corners) și a treia valoare se aplică colțului din dreapta jos(bottom-right corner)).
Două valori - border-radius: 15px 50px; (prima valoare se aplică colțurilor din stânga sus și din dreapta jos(top-left și bottom-right corners), iar a doua valoare se aplică colțurilor din dreapta sus și din stânga jos(top-right și bottom-left corners)).
O valoare - border-radius: 15px; (valoarea se aplică la toate cele patru colțuri, care sunt rotunjite în mod egal).
Proprietăți CSS Rounded Corners
border-radius O proprietate shorthand pentru setarea tuturor celor patru chenare - * - * - proprietăți radius.
border-top-left-radius Definește forma marginii din colțul din stânga sus.
border-top-right-radius Definește forma marginii din colțul din dreapta sus.
border-bottom-right-radius Definește forma marginii din colțul din dreapta jos.
border-bottom-left-radius Definește forma marginii din colțul din stânga jos.

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 Fonturi Web

Fonturi Web CSS
Regula CSS @ font-face
Fonturile web permit proiectanților web să utilizeze fonturi care nu sunt instalate pe computerul utilizatorului.
Când a-ți găsit / cumpărat fontul pe care doriți să-l utilizați, includeți doar fișierul font pe serverul dvs. web, iar acesta va fi descărcat automat la nevoie.
Fonturile dvs. proprii sunt definite în regula CSS @font-face.
Diferite formate de fonturi (Different Font Formats)
Fonturi TrueType (TTF)
TrueType este un standard de font dezvoltat la sfârșitul anilor 1980, de Apple și Microsoft. TrueType este cel mai frecvent format de font atât pentru sistemele de operare Mac OS cât și pentru Microsoft Windows.
Fonturi OpenType (OTF)
OpenType este un format pentru fonturile computerului scalabile. A fost construit pe TrueType și este marcă înregistrată a Microsoft. Fonturile OpenType sunt utilizate astăzi frecvent pe majore platforme de calculatoare.
Web Open Font Format (WOFF)
WOFF este un format de font folosit pentru paginile web. A fost dezvoltat în 2009 și este acum o recomandare a W3C. WOFF este în esență OpenType sau TrueType cu compresie și metadate suplimentare. Scopul este de a sprijini distribuirea fontului de la un server la un client printr-o rețea cu restricții de lățime de bandă.
Web Open Font Format (WOFF 2.0)
Fontul TrueType / OpenType care asigură o compresie mai bună decât WOFF 1.0.
Fonturi / forme SVG
Fonturile SVG permit SVG-ului să fie utilizat ca glife la afișarea textului. Specificația SVG 1.1 definește un modul de font care permite crearea de fonturi într-un document SVG. Puteți aplica CSS și în documentele SVG, iar regula @ font-face poate fi aplicată textului în documente SVG.
Fonturi OpenType încorporate (EOT)
Fonturile EOT sunt o formă compactă de fonturi OpenType proiectate de Microsoft pentru a fi utilizate ca fonturi încorporate pe paginile web.
Asistență browser pentru formate de fonturi
IE: formatul fontului funcționează numai atunci când este setat să fie „instalabil”.
Firefox: Nu este acceptat implicit, dar poate fi activat (trebuie să setați un steag la „true” pentru a utiliza WOFF2).
Utilizarea Bold Text
Trebuie să adăugați o altă regulă @font-face care conține descriptori pentru text bold
Descriptori de fonturi CSS (CSS Font Descriptors)

CSS Transformări 2D

Transformări 2D CSS
Transformările CSS vă permit să vă deplasați, să rotiți, să scalați și să înlăturați elemente.
Proprietăți CSS: transform.
Asistență browser (Browser Support)
Numerele din tabel specifică prima versiune a browserului care acceptă integral proprietatea.
Prefixuri specifice browserului
Unele browsere mai vechi au nevoie de prefixe specifice (-ms- sau -webkit-) pentru a înțelege proprietățile de transformare 2D.
CSS Metode de transformare 2D
Cu proprietatea de transformare CSS puteți utiliza următoarele metode de transformare 2D: translate(), rotate(), scaleX(), scaleY(), scale(), skewX(), skewY(), skew(), matrix()
Metoda translate() mută un element din poziția sa curentă (în funcție de parametrii indicați pentru axa X și axa Y).
Metoda rotate() roteste un element în sensul acelor de ceasornic sau în sens contrar acelor de ceasornic, în conformitate cu un anumit grad.
Utilizarea valorilor negative va roti elementul în sensul acelor de ceasornic.
Metoda scale() crește sau scade dimensiunea unui element (în funcție de parametrii dați pentru lățime și înălțime).
Metoda scaleX() crește sau scade lățimea unui element.
Metoda scaleY() crește sau scade înălțimea unui element.
Metoda skewX() frânează un element de-a lungul axei X cu unghiul dat.
Metoda skewY() frânează un element de-a lungul axei Y de unghiul dat.
Metoda skew() frânează un element de-a lungul axelor X și Y de unghiurile date.
Metoda matrix() combină toate metodele de transformare 2D într-una.
Metoda matrix() ia șase parametri, care conțin funcții matematice, ceea ce vă permite să rotiți, să scalați, să mutați (să translați) și să înlăturați elemente.
Parametrii sunt următorii: matrix(scaleX(),skewY(),skewX(),scaleY(),translateX(),translateY())
Proprietăți de transformare CSS
transform - Aplică o transformare 2D sau 3D la un element.
transform-origin - Vă permite să schimbați poziția asupra elementelor transformate.
CSS Metode de transformare 2D
matrix(n, n, n, n, n, n) - Definește o transformare 2D, folosind o matrice de șase valori
translate(x, y) -  Definește o transformare 2D, mutând elementul de-a lungul axei X și Y
translateX(n) - Definește o transformare 2D, mutând elementul de-a lungul axei X
translateY(n) - Definește o transformare 2D, mutând elementul de-a lungul axei Y
scale(x, y) - Definește o transformare la scară 2D, modificând lățimea și înălțimea elementelor
scaleX(n) - Definește o transformare la scară 2D, modificând lățimea elementului
scaleY(n) - Definește o transformare la scară 2D, schimbând înălțimea elementului
rotate(angle) - Definește o rotație 2D, unghiul este specificat în parametru
skew(angle x, angle y) - Definește o transformare în 2D de-a lungul axei X și Y
skewX(angle) - Definește o transformare în 2D de-a lungul axei X
skewY(angle) - Definește o transformare în 2D de-a lungul axei Y

CSS Transformări 3D

CSS Transformări 3D
CSS acceptă, de asemenea, transformări 3D.
În acest capitol veți afla despre următoarele proprietăți CSS: transform
Asistență browser (Browser Support)
Prefixuri specifice browserului
Unele browsere mai vechi au nevoie de prefixe specifice (-webkit-) pentru a înțelege proprietățiile de transformare 3D.
CSS Metode de transformare 3D
Cu proprietatea de transformare CSS puteți utiliza următoarele metode de transformare 3D: rotateX(), rotateY(), rotateZ()
Metoda rotateX() roteste un element in jurul axei X la un anumit grad.
Metoda rotateY() roteste un element in jurul axei sale Y la un anumit grad.
Metoda rotateZ() roteste un element in jurul axei Z la un anumit grad.
Proprietăți de transformare CSS
transform - Aplică o transformare 2D sau 3D la un element
transform-origin - Vă permite să schimbați poziția asupra elementelor transformate
transform-style - Specifică modul în care sunt redate elementele nested în spațiul 3D
perspective - Specifică perspectiva asupra modului în care sunt vizualizate elementele 3D
perspective-origin - Specifică poziția de jos a elementelor 3D
backface-visibility - Vizualizează dacă un element trebuie să fie vizibil atunci când nu este orientat către ecran
CSS Metode de transformare 3D
matrix3d
(n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n) - Definește o transformare 3D, folosind o matrice 4x4 cu 16 valori
translate3d(x, y, z) - Definește o traducere 3D
translateX(x) - Definește o traducere 3D, folosind doar valoarea pentru axa X
translateY(y) - Definește o traducere 3D, folosind doar valoarea pentru axa Y
translateZ(z) - Definește o traducere 3D, folosind doar valoarea pentru axa Z
scale3d(x, y, z) - Definește o transformare la scară 3D
scaleX(x) - Definește o transformare a scării 3D dând o valoare pentru axa X
scaleY(y) - Definește o transformare a scării 3D dând o valoare pentru axa Y
scaleZ(z) - Definește o transformare a scării 3D dând o valoare pentru axa Z
rotate3d(x, y, z, angle) - Definește o rotație 3D
rotateX(angle) - Definește o rotație 3D de-a lungul axei X
rotateY(angle) - Definește o rotație 3D de-a lungul axei Y
rotateZ(angle) - Definește o rotație 3D de-a lungul axei Z
perspective(n) - Definește o vedere în perspectivă pentru un element transformat 3D

CSS Tranziții

Tranziții CSS
Tranzițiile CSS vă permit să modificați valorile proprietății fără probleme, pe o durată dată.
În acest capitol veți afla despre următoarele proprietăți: transition, transition-delay, transition-duration, transition-property, transition-timing-function
Asistență browser pentru tranziții
Prefixuri specifice browserului
Unele browsere mai vechi au nevoie de prefixuri specifice (-webkit-) pentru a înțelege proprietățiile de tranziție
Cum se utilizează tranzițiile CSS?
Pentru a crea un efect de tranziție, trebuie să specificați două lucruri:
proprietatea CSS la care doriți să adăugați un efect
durata efectului
Dacă partea de durată nu este specificată, tranziția nu va avea nici un efect, deoarece valoarea implicită este 0.
Un element <div> 100px * 100px red. Elementul <div> a specificat, de asemenea, un efect de tranziție pentru proprietatea de lățime, cu o durată de 2 secunde.
Efectul de tranziție va începe atunci când proprietatea CSS (lățimea/width) specificată modifică valoarea.
Acum, să specificăm o nouă valoare pentru proprietatea de lățime/width atunci când un utilizator se alătură peste elementul <div>:
Atunci când cursorul se decuplează din element, acesta se va schimba treptat înapoi la stilul său original.
Modificați mai multe valori ale proprietății
Efect de tranziție atât pentru proprietatea lățimii (width), cât și pentru înălțime (height), cu o durată de 2 secunde pentru lățime (width) și 4 secunde pentru înălțime (height).
Specificați curba de viteză (speed curve) a tranziției
Proprietatea transition-timing-function specifică curba de viteză (speed curve) a efectului de tranziție.
Proprietatea transition-timing-function poate avea următoarele valori:
ease - specifică un efect de tranziție cu început lent, apoi rapid, apoi sfârșit lent (acest lucru este implicit)
linear - specifică un efect de tranziție cu aceeași viteză de la început până la sfârșit
ease-in - specifică un efect de tranziție cu pornire lentă
ease-out - specifică un efect de tranziție cu sfârșit lent
ease-in-out - specifică un efect de tranziție cu început și sfârșit lent
cubic-bezier(n,n,n,n) - vă permite să definiți propriile valori într-o funcție cub-bezier
Întârzie efectul de tranziție (Delay the Transition Effect)
Proprietatea transition-delay specifică o întârziere (în secunde) pentru efectul de tranziție.
Tranziție + transformare (Transition + Transformation)
Proprietățiile CSS transition pot fi specificate una câte una
Proprietatea shorthand transition
Proprietăți CSS transition:
transition - O proprietate scurtă pentru setarea celor patru proprietăți de tranziție într-o singură proprietate
transition-delay - Specifică o întârziere (în secunde) pentru efectul de tranziție
transition-duration - Specifică câte secunde sau milisecunde durează un efect de tranziție
transition-property - Specifică numele proprietății CSS pentru care este efectul de tranziție
transition-timing-function - Specifică curba de viteză a efectului de tranziție

CSS Animații

Animații CSS
CSS permite animarea elementelor HTML fără a utiliza JavaScript sau Flash!
În acest capitol veți afla despre următoarele proprietăți: @keyframes, animation-name, animation-duration, animation-delay, animation-iteration-count, animation-direction, animation-timing-function, animation-fill-mode, animation.
Asistență browser pentru animații (Browser Support for Animations)
Prefixuri specifice browserului
Unele browsere mai vechi au nevoie de prefixe specifice (-webkit-) pentru a înțelege proprietățiile de animație.
Ce sunt animațiile CSS?
O animație permite unui element să se schimbe treptat de la un stil la altul.
Puteți modifica câte proprietăți CSS doriți, de câte ori doriți.
Pentru a utiliza animația CSS, trebuie mai întâi să specificați câteva cadre cheie pentru animație.
Cadrele cheie conțin ce stiluri va avea elementul în anumite momente.
Regula @keyframes
Când specificați stiluri CSS din regula @keyframes, animația se va schimba treptat de la stilul curent la noul stil în anumite momente.
Pentru ca animația să funcționeze, trebuie să legați animația de un element.
Legarea animației „exemplu” de elementul <div>. Animația va dura 4 secunde și va schimba treptat culoarea de fundal a elementului <div> de la „red” la „yellow”.
Proprietatea animation-duration definește cât timp ar trebui să dureze o animație. Dacă proprietatea animation-duration nu este specificată, nu va apărea nicio animație, deoarece valoarea implicită este 0s (0 secunde).
Am specificat când stilul se va schimba folosind cuvintele cheie „from” și „to” (care reprezintă 0% (start) și 100% (complet)).
Este posibilă utilizarea procentului. Utilizând procente, puteți adăuga oricâte modificări de stil doriți.
Schimbarea culorii de fundal (background-color) a elementului <div> atunci când animația este completă 25%, 50% completă și din nou când animația este 100% completă:
Întârziere animație (Delay an Animation)
Proprietatea animation-delay specifică o întârziere pentru începerea unei animații.
De asemenea, sunt permise valori negative. Dacă utilizați valori negative, animația va începe ca și cum ar fi jucat deja N secunde.
Setați de câte ori ar trebui să ruleze o animație
Proprietatea animation-iteration-count specifică numărul pe care trebuie să-l ruleze o animație.
Valoarea „infinite”  - pentru a face animația să continue pentru totdeauna
Rulați animația în direcție inversă sau cicluri alternative
Proprietatea animation-direction specifică dacă o animație trebuie să fie redată înainte, înapoi sau în cicluri alternative.
Proprietatea animation-direction poate avea următoarele valori:
normal - Animația este redată normal (înainte). Aceasta este implicită
reverse - animația este redată în sens invers (înapoi)
alternate - animația este redată mai întâi, apoi înapoi
alternate-reverse - animația este redată mai întâi înapoi, apoi înainte
Rulare animație în sens invers (înapoi)(backwards).
Valoarea "alternate" pentru a face ca animația să fie difuzată mai întâi înainte (forwards), apoi înapoi (backwards).
Valoarea „alternate-reverse” pentru a face ca animația să fie rulată mai întâi înapoi(backwards), apoi înainte (forwards)
Rulați animația în direcție inversă sau cicluri alternative
Proprietatea animation-direction specifică dacă o animație trebuie să fie redată înainte, înapoi sau în cicluri alternative.
Proprietatea animation-direction poate avea următoarele valori:
normal - Animația este redată normal (înainte)(forwards). Aceasta este implicită
reverse - animația este redată în sens invers (înapoi)
alternate - animația este redată mai întâi înainte(forwards), apoi înapoi(backwards)
alternate-reverse - animația este redată mai întâi înapoi(backwards), apoi înainte(forwards)
Rulare animație în sens invers (înapoi)(backwards):
Valoarea "alternate" pentru a face ca animația să fie difuzată mai întâi înainte (forwards), apoi înapoi (backwards).
Valoarea „alternate-reverse” pentru a face ca animația să fie rulată mai întâi înapoi(backwards), apoi înainte(forwards).
Precizați curba de viteză (Speed Curve) a animației
Proprietatea animation-timing-function specifică curba de viteză (speed curve) a animației.
Proprietatea animation-timing-function  poate avea următoarele valori:
ease - Specifică o animație cu început lent, apoi rapid, apoi sfârșit încet (aceasta este implicit)
linear - Specifică o animație cu aceeași viteză de la început până la sfârșit
ease-in - Specifică o animație cu pornire lentă
ease-out - Specifică o animație cu sfârșit lent
ease-in-out - Specifică o animație cu început și sfârșit lent
cubic-bezier(n,n,n,n) - Vă permite să definiți propriile valori într-o funcție cubic-bezier
Precizați modul de completare (fill-mode) pentru o animație
Animațiile CSS nu afectează un element înainte de a fi redat primul cadru-cheie (keyframe) sau după ce ultimul cadru-cheie (keyframe) este redat. Proprietatea animation-fill-mode poate înlocui acest comportament.
Proprietatea animation-fill-mode specifică un stil pentru elementul țintă atunci când animația nu se joacă (înainte de a începe, după ce se termină, sau ambele).
Proprietatea animation-fill-modepoate avea următoarele valori:
none - Valoare implicită. Animația nu va aplica niciun stil la element înainte sau după executarea acestuia
forwards - Elementul va pastra valorile stilului setate de ultimul cadru cheie (keyframe) (depinde de animation-direction și animation-iteration-count)
backwards - Elementul va obține valorile de stil setate de primul cadru-cheie (keyframe) (depinde de animation-direction) și îl va păstra în timpul perioadei de întârziere a animației
both - Animația va respecta regulile atât în ​​față cât și înapoi (forwards și backwards), extinzând proprietățiile de animație în ambele direcții
Elementul <div> păstrează valorile stilului de la ultimul cadru cheie (keyframe) la încheierea animației.
Exemple animation-fill-mode
Elementul <div> obține valorile style setate de primul cadru cheie (keyframe) înainte de începerea animației (în perioada de întârziere a animației (animation-delay)).
Elementul <div> obține valorile style setate de primul cadru cheie (keyframe) înainte de începerea animației și să păstreze valorile stilului de la ultimul cadru de cheie (keyframe) atunci când animația se încheie.
Proprietatea Shorthand Animation
Proprietăți CSS animation
@keyframes - Specifică codul de animație
animation - O proprietate shorthand pentru setarea tuturor proprietăților de animație
animation-delay - Specifică o întârziere pentru începerea unei animații
animation-direction - Specifică dacă o animație trebuie să fie redată înainte, înapoi sau în cicluri alternative
animation-duration - Specifică cât timp trebuie să dureze o animație pentru a finaliza un ciclu
animation-fill-mode - Specifică un stil pentru element atunci când animația nu se joacă (înainte de a începe, după ce se termină sau ambele)
animation-iteration-count - Specifică numărul de ori când trebuie să fie redată o animație
animation-name - Specifică numele animației @keyframes
animation-play-state - Specifică dacă animația este în curs de execuție sau în pauză
animation-timing-function - Specifică curba de viteză a animației

CSS Stilizarea imaginilor

CSS Stilizarea imaginilor (CSS Styling Images)
Imagini rotunjite (Rounded Images)
Utilizați proprietatea border-radius pentru a crea imagini rotunjite (rounded images).
Imagini în miniatură (Thumbnail Images)
Utilizați proprietatea border pentru a crea imagini în miniatură (thumbnail images).
Imagine in miniatură (thumbnail image).
Imagine în miniatură ca link (Thumbnail Image as Link).
Imagini responsive (Responsive Images)
Imaginile responsive se vor regla automat pentru a se potrivi cu dimensiunea ecranului.
Redimensionați fereastra browserului pentru a vedea efectul.
Centrați o imagine (Center an Image)
Pentru a centra o imagine, setați marginea stângă și dreapta pe auto și transformați-o într-un element block.
Imagini / Carduri Polaroid (Polaroid Images / Cards)
Imagine transparentă
Proprietatea opacity poate lua o valoare între 0,0 și 1,0. Cu cât valoarea este mai mică, cu atât este mai transparentă:
IE8 și versiunile anterioare folosesc filter:alpha(opacity=x). X poate lua o valoare de la 0 la 100. O valoare mai mică face ca elementul să fie mai transparent.
Image Text
Cum se poziționează textul într-o imagine.
Filtre de imagine (Image Filters)
Proprietatea CSS filter adaugă efecte vizuale (precum estomparea și saturația/(blur and saturation) unui element.
Proprietatea CSS filter nu este acceptată în Internet Explorer, Edge 12 sau Safari 5.1 și nici în versiunile anterioare.
Image Hover Overlay
Creați un efect de suprapunere asupra hover.
Rotiți o imagine
Mutați mouse-ul peste imagine.
Galerie de imagini responsive
CSS poate fi utilizat pentru a crea galerii de imagini. Acest exemplu utilizează interogări media pentru a reorganiza imaginile pe dimensiuni de ecran diferite. Redimensionați fereastra browserului pentru a vedea efectul.
Image Modal (Advanced)
Modul în care CSS și JavaScript pot lucra împreună.
În primul rând, utilizați CSS pentru a crea o fereastră modală (dialog box) și ascundeți-o în mod implicit.
Apoi, utilizați un JavaScript pentru a afișa fereastra modală și pentru a afișa imaginea în interiorul modalului, atunci când un utilizator face click pe imagine.

CSS object-fit

Proprietatea CSS object-fit
Proprietatea CSS object-fit este utilizată pentru a specifica modul în care un <img> sau <video> trebuie redimensionat pentru a se potrivi cu containerul său.
Această proprietate spune conținutului să umple containerul într-o varietate de moduri; cum ar fi „păstrați acel raport de aspect” sau „întindeți-vă și ocupați cât mai mult spațiu”.
Asistență browser (Browser Support)
Avem două imagini și dorim ca acestea să umple lățimea de 50% a ferestrei browserului și 100% din înălțime.
Nu folosim object-fit, așa că atunci când redimensionăm fereastra browserului, raportul de aspect al imaginilor va fi distrus.
Folosim object-fit: cover; astfel, când redimensionăm fereastra browserului, raportul de aspect al imaginilor este păstrat.
Toate valorile proprietății CSS object-fit
Proprietatea CSS object-fit poate avea următoarele valori:
fill - Aceasta este implicită. Conținutul înlocuit este dimensionat pentru a completa content box a elementului. Dacă este necesar, obiectul va fi stretched sau squished pentru a se potrivi
contain - Conținutul înlocuit este scalat pentru a-și menține raportul de aspect (aspect ratio) în timp ce se încadrează în content box a elementului
cover - Conținutul înlocuit este dimensionat pentru a-și păstra raportul de aspect (aspect ratio) în timp ce umpleți întreaga content box a elementului. Obiectul va fi tăiat (clipped ) pentru a se potrivi
none - Conținutul înlocuit nu este redimensionat
scale-down - Conținutul este dimensionat ca și cum nici un conținut nu a fost specificat (ar avea ca rezultat o dimensiune mai mică a obiectului concret).

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 Coloane multiple

CSS Coloane multiple
Layout cu mai multe coloane CSS( CSS Multi-column Layout)
Aspectul cu mai multe coloane CSS (multi-column layout) permite definirea ușoară a mai multor coloane de text - la fel ca în ziare.
Proprietăți CSS Multi-column
În acest capitol veți afla despre următoarele proprietăți CSS multi-column: column-count, column-gap, column-rule-style, column-rule-width, column-rule-color, column-rule, column-span, column-width.
Asistență browser (Browser Support)
CSS Creează mai multe coloane (CSS Create Multiple Columns)
Proprietatea column-count specifică numărul de coloane în care trebuie divizat un element.
Impărțirea textului din elementul <div> în 3 coloane.
CSS Specificați decalajul dintre coloane (CSS Specify the Gap Between Columns)
Proprietatea column-gap specifică decalajul dintre coloane.
Specifică o distanță de 40 de pixeli între coloane.
CSS Reguli coloane (CSS Column Rules)
Proprietatea column-rule-style specifică stilul regulii dintre coloane.
Proprietatea column-rule-width specifică lățimea regulii între coloane.
Proprietatea column-rule-color specifică culoarea regulii dintre coloane.
Proprietatea column-rule este o proprietate shorthand pentru setarea tuturor proprietăților column-rule- * de mai sus.
Stabilre lățimea, stilul și culoarea (width, style, color) regulii între coloane.
Specificați câte coloane ar trebui să se întindă (Specify How Many Columns an Element Should Span)
Proprietatea column-span specifică câte coloane ar trebui să se întindă (span) între un element.
Următorul exemplu specifică faptul că elementul <h2> ar trebui să se întindă (span) pe toate coloanele.
Specificați Lățimea coloanei (Specify The Column Width)
Proprietatea coloană-lățime specifică o lățime sugerată, optimă pentru coloane.
Specifică faptul că lățimea optimă sugerată pentru coloane ar trebui să fie de 100px.
Proprietăți CSS Multi-columns
column-count - Specifică numărul de coloane în care trebuie divizat un element
column-fill - Specifică modul de completare a coloanelor
column-gap - Specifică decalajul dintre coloane
column-rule - O proprietate shorthand pentru setarea tuturor proprietăților column-rule- *
column-rule-color - Specifică culoarea regulii dintre coloane
column-rule-style - Specifică stilul regulii dintre coloane
column-rule-width - Specifică lățimea regulii dintre coloane
column-span - Specifică câte coloane ar trebui să se întindă pe un element
column-width - Specifică o lățime sugerată, optimă pentru coloane
columns - O proprietate shorthand pentru setarea lățimii coloanei și a numărului de coloane

 

CSS Interfață utilizator

CSS Interfață utilizator
În acest capitol veți afla despre următoarele proprietăți ale interfeței de utilizator CSS: resize, outline-offset
Asistență browser
Numerele din tabel specifică prima versiune a browserului care acceptă integral proprietatea.
Redimensionare CSS (CSS Resizing)
Proprietatea resize specifică dacă (și cum) un element trebuie redimensionat de către utilizator.
Internet Explorer și Edge nu acceptă proprietatea resize.
Permite utilizatorului să redimensioneze doar lățimea unui element <div>.
Permite utilizatorului să redimensioneze doar înălțimea unui element <div>.
Permite utilizatorului redimensionarea atât a înălțimii, cât și a lățimii unui element <div>.
În multe browsere, <textarea> poate fi redimensionată în mod implicit. Aici, am folosit proprietatea resize pentru a dezactiva redimensionarea.
CSS Outline Offset
Proprietatea outline-offset adaugă spațiu între un contur (outline) și margine (edge) sau un border unui element.
Conturul (Outline) diferă de granițe (borders)! Spre deosebire de graniță (border), conturul (outline) este tras în afara graniței (border) elementului și poate suprapune alt conținut. De asemenea, conturul (outline) NU este o parte din dimensiunile elementului; lățimea și înălțimea (width și height) totală a elementului nu este afectată de lățimea conturului (outline).
Următorul exemplu utilizează proprietatea outline-offset pentru a adăuga spațiu între graniță (borders) și contur (outline)
Proprietăți CSS interfață utilizator
outline-offset - Adăugă spațiu între un contur (outline) și margine (edge) sau marginea (border) unui element
resize - Specifică dacă un element poate fi redimensionat de către utilizator

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 Interogări media

CSS Interogări media (CSS Media Queries)
CSS2 Tipuri de suport introduse (CSS2 Introduced Media Types)
Regula @media, introdusă în CSS2, a făcut posibilă definirea regulilor de stil (style rules) diferite pentru diferite tipuri de media.
Ați putea avea un set de reguli de stil (style rules) pentru ecrane de computer, una pentru imprimante, una pentru dispozitive portabile, una pentru dispozitive tip televizor și așa mai departe.
Din păcate, aceste tipuri de suporturi nu au primit niciodată multă asistență din partea dispozitivelor, în afară de tipul de printare (print media type).
CSS3 Interogări media introduse (CSS3 Introduced Media Queries)
Interogările media (Media queries) din CSS3 au extins ideea tipurilor de media CSS2: În loc să caute un tip de dispozitiv, ele analizează capacitatea dispozitivului.
Interogările media (Media queries) pot fi utilizate pentru a verifica multe lucruri, cum ar fi:
lățimea și înălțimea vizualizării (width and height of the viewport)
lățimea și înălțimea dispozitivului (width and height of the device)
orientare (tableta / telefonul este în mod landscape sau portret?) (orientation (is the tablet/phone in landscape or portrait mode?))
rezoluţie (resolution)
Asistență browser(Browser Support)
Numerele din tabel specifică prima versiune a browserului care acceptă integral regula @media.
Sintaxa interogare media (Media Query Syntax)
O interogare media (media query) constă dintr-un tip media și poate conține una sau mai multe expresii, care se rezolvă returnand  fie valoarea adevărat, fie valoarea fals.
Rezultatul interogării este adevărat dacă tipul de media (media type) specificat se potrivește cu tipul de dispozitiv pe care este afișat documentul și toate expresiile din interogarea media (media query) sunt adevărate. Când o interogare media (media query) este adevărată, se aplică foaia de stil (stylesheets) sau regulile de stil (style rules) corespunzătoare, urmând regulile normale în cascadă.
Cu excepția cazului în care utilizați operatorii not sau only, tipul media este opțional și tot tipul va fi implicat.
Puteți avea, de asemenea, foi de stil (stylesheets) diferite pentru media diferite.
CSS3 Tipuri media (CSS3 Media Types)
all - Utilizat pentru toate dispozitivele de tip media
print - Utilizat pentru imprimante
screen - Utilizat pentru ecrane, tablete, telefoane inteligente etc.
speach - Utilizată pentru ecranizatorii care „citesc” pagina cu voce tare
O modalitate de a utiliza interogări media (media queries) este să aveți o secțiune CSS alternativă chiar în foaia de stil (style sheet).

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 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.

CSS Responsive Web Design - Interogări media

Responsive Web Design - Interogări media
Ce este o interogare media?
Interogarea media este o tehnică CSS introdusă în CSS3.
Utilizează regula @media pentru a include un block de proprietăți CSS numai dacă o anumită condiție este adevărată.
Dacă fereastra browserului este de 600px sau mai mică, culoarea de fundal (background color) va fi deschisă la culoare (lightblue).
Adăugați un Breakpoint
Mai devreme în acest tutorial am făcut o pagină web cu rânduri și coloane și a fost responzive, dar nu arăta bine pe un ecran mic.
Interogările media (media queries) vă pot ajuta. Putem adăuga un punct de break (breakpoint) unde anumite părți ale designelui se vor comporta diferit pe fiecare parte a punctului de break (breakpoint).
Utilizați o interogare media (media queries) pentru a adăuga un punct de break (breakpoint) la 768px:
Când ecranul (fereastra browserului) devine mai mic decât 768px, fiecare coloană ar trebui să aibă o lățime de 100%.
Întotdeauna design pentru mobil întâi
Mobile First înseamnă proiectare pentru mobil înainte de proiectare pentru desktop sau orice alt dispozitiv (Acest lucru va face afișarea paginii mai rapidă pe dispozitive mai mici).
Aceasta înseamnă că trebuie să facem unele modificări în CSS-ul nostru.
În loc să schimbăm stilurile când lățimea devine mai mică de 768px, ar trebui să schimbăm designul când lățimea devine mai mare de 768px. Acest lucru va face în primul rând proiectarea noastră mobilă.
Puteți adăuga câte breakpoints doriți.
Vom insera, de asemenea, un punct de break (breakpoint) între tablete și telefoane mobile.
Facem acest lucru prin adăugarea a încă o interogare media (media query ) (la 600px) și un set de clase noi pentru dispozitive mai mari de 600px (dar mai mici decât 768px):
Rețineți că cele două seturi de clase sunt aproape identice, singura diferență este denumirea (col- și col-s-).
Breakpoints tipice dispozitivului (Typical Device Breakpoints)
Există tone de ecrane și dispozitive cu înălțimi și lățimi diferite, așa că este greu să creezi un punct de break (breakpoint) exact pentru fiecare dispozitiv. Pentru a menține lucrurile simple, puteți viza cinci grupuri.
Orientare: Portret / Peisaj (Landscape)
Interogările media (media queries) 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” (Lanscape):
Pagina web va avea un fundal luminos (lightblue background) dacă orientarea este în modul peisaj (lanscape).
Ascundeți elementele cu interogări media (Hide Elements With Media Queries)
O altă utilizare obișnuită a interogărilor media (media queries) este de a ascunde elemente pe dimensiuni diferite de ecran.
Modificați dimensiunea fontului cu interogări media (Change Font Size With Media Queries)
De asemenea, puteți utiliza interogări media (media queries) pentru a modifica dimensiunea fontului unui element pe diferite dimensiuni ale ecranului.

CSS Responsive Web Design - Imagini

Responsive Web Design - Images
Utilizarea proprietății Width
Dacă proprietatea lățimii (width) este setată la un procent și înălțimea este setată la „auto”, imaginea va fi receptivă și va scala în sus și în jos.
Imaginea poate fi redusă pentru a fi mai mare decât dimensiunea inițială. O soluție mai bună, în multe cazuri, va fi utilizarea în schimb a proprietății cu lățimea maximă.
Imaginile de fundal (Background Images) pot răspunde, de asemenea, la redimensionare și scalare (resizing și scaling).
Dacă proprietatea background-size este setată pe „contain”, imaginea de fundal (background Images) se va scala și va încerca să se potrivească zonei de conținut. Cu toate acestea, imaginea își va păstra raportul de aspect (relația proporțională între lățimea și înălțimea imaginii (width și height)).
Dacă proprietatea background-size este setată pe „100% 100%”, imaginea de fundal (background image) se va întinde pentru a acoperi întreaga zonă de conținut.
Dacă proprietatea background-size este setată pe „cover”, imaginea de fundal (background image) se va scala pentru a acoperi întreaga zonă de conținut. Observați că valoarea „cover” păstrează raportul de aspect (aspect ratio), iar o parte din imaginea de fundal (background image) poate fi tăiată.
Imagini diferite pentru dispozitive diferite
O imagine mare poate fi perfectă pe un ecran mare al unui computer, dar inutilă pe un dispozitiv mic. De ce să încărcați o imagine mare atunci când trebuie să o măriți în jos? Pentru a reduce încărcarea sau pentru orice alte motive, puteți utiliza interogări media (media queries) pentru a afișa imagini diferite pe dispozitive diferite.
Puteți utiliza interogarea media (media query) min-device-width, în loc de min-width, care verifică lățimea dispozitivului, în loc de lățimea browserului. Atunci imaginea nu se va schimba când redimensionați fereastra browserului.
Elementul HTML5 <picture>
HTML5 a introdus elementul <picture>, care vă permite să definiți mai multe imagini.
Asistență browser (Browser Support)
Elementul <picture> funcționează similar cu elementele <video> și <audio>. Configurați surse diferite, iar prima sursă care se potrivește preferințelor este cea utilizată:
Atributul srcset este necesar și definește sursa imaginii.
Atributul media este opțional și acceptă interogările media (media queries) pe care le găsiți în regula CSS @media.
De asemenea, ar trebui să definiți un element <img> pentru browserele care nu acceptă elementul <picture>.

CSS Responsive Web Design - Frameworks

Responsive Web Design - Frameworks
Există multe CSS Frameworks existente care oferă un design responsive.
Sunt gratuite și ușor de utilizat.
Folosire W3.CSS
O modalitate excelentă de a crea un design responsive este să folosești o foaie de stil responsive ( responsive style sheet), cum ar fi W3.CSS
W3.CSS facilitează dezvoltarea site-urilor care arată frumos la orice dimensiune; desktop, laptop, tabletă sau telefon.
Bootstrap
Un alt framework popular este Bootstrap, folosește HTML, CSS și jQuery pentru a face pagini web responsive.

CSS Grid Item

CSS Grid Item
Child Elements (Items)
Un container grid conține elemente grid.
În mod implicit, un container are un articol grid pentru fiecare coloană, în fiecare rând, dar puteți stila elementele gridului astfel încât acestea să se întindă pe mai multe coloane și / sau rânduri.
Proprietatea grid-column:
Proprietatea grid-column definește pe ce coloane (ele) să plaseze un articol.
Definiți unde va începe elementul și unde se va termina.
Proprietatea grid-column este o proprietate shorthand pentru proprietățiile grid-column-start și grid-column-end.
Pentru a plasa un articol, vă puteți referi la numere de linie sau puteți utiliza cuvântul cheie „span” pentru a defini câte coloane va cuprinde.
Proprietatea grid-row
Proprietatea grid-row definește pe ce rând să plaseze un element.
Definiți unde va începe elementul și unde se va termina.
Proprietatea grid-row este o proprietate shorthand pentru proprietățiile grid-row-start și grid-row-end.
Pentru a plasa un articol, vă puteți referi la numere de linie sau puteți utiliza cuvântul cheie „span” pentru a defini câte rânduri va cuprinde elementul.
Proprietatea grid-area
Proprietatea grid-area poate fi utilizată ca proprietate de tip shorthand pentru proprietățiile grid-row-start, grid-column-start, grid-row-end și the grid-column-end.
Denumirea elementelor grid
Proprietatea grid-area poate fi, de asemenea, utilizată pentru a atribui nume elementelor grid.
Elementele grid denumite (Named grid items) pot fi menționate de proprietatea grid-template-areas ale containerului grid.
Fiecare rând este definit prin apostroafe ('')
Coloanele din fiecare rând sunt definite în interiorul apostrofelor, separate de un spațiu.
Un semn de perioadă reprezintă un element grid fără nume.
Pentru a defini două rânduri, definiți coloana celui de-al doilea rând în interiorul unui alt set de apostroafe.
The Order of the Items
Aspectul gridului (Grid Layout) ne permite să poziționăm articolele oriunde ne-ar plăcea.
Primul articol din codul HTML nu trebuie să apară ca prim element din grid.

SQL INSERT INTO

Instrucțiunea SQL INSERT INTO
Instrucțiunea INSERT INTO este utilizată pentru a insera înregistrări noi într-un tabel.
Sintaxa INSERT INTO
Este posibil să scrieți instrucțiunea INSERT INTO în două moduri.
Prima modalitate specifică atât numele coloanelor, cât și valorile care trebuie introduse:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
Dacă adăugați valori pentru toate coloanele tabelului, nu este necesar să specificați numele coloanelor din interogarea SQL. Cu toate acestea, asigurați-vă că ordinea valorilor este în aceeași ordine cu coloanele din tabel.
Sintaxa INSERT INTO ar fi următoarea:
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
Exemplu INSERT INTO
Următoarea instrucțiune SQL introduce o nouă înregistrare în tabelul "Customers":
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
Inserați date numai în coloane specificate
De asemenea, este posibil să inserați date doar în coloane specifice.
Următoarea instrucțiune SQL va insera o înregistrare nouă, dar va insera doar date în coloanele „CustomerName”, „City” și „Country” (CustomerID va fi actualizat automat):
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');

SQL UPDATE

Instrucțiunea SQL UPDATE
Instrucțiunea UPDATE este utilizată pentru a modifica înregistrările existente într-un tabel.
Sintaxa UPDATE
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
Aveți grijă când actualizați înregistrările într-un tabel! Observați clauza WHERE din declarația UPDATE. Clauza WHERE specifică ce înregistrări trebuie actualizate. Dacă omiteți clauza WHERE, toate înregistrările din tabel vor fi actualizate!
Tabela UPDATE 
Următoarea instrucțiune SQL actualizează primul client (CustomerID = 1) cu o persoană de contact nouă și un oraș nou.
UPDATE Customers
SET ContactName = 'Ion Popescu', City= 'Bucuresti'
WHERE CustomerID = 1;
Înregistrări multiple UPDATE
Clauza WHERE este cea care determină câte înregistrări vor fi actualizate.
Următoarea declarație SQL va actualiza numele de contact la „Ion” pentru toate înregistrările în care țara este „Romania”:
UPDATE Customers
SET ContactName='Ion'
WHERE Country='Romania';
UPDATE avertizare!
Aveți grijă când actualizați înregistrările. Dacă omiteți clauza WHERE, TOATE înregistrările vor fi actualizate!
UPDATE Customers
SET ContactName='Ion';

SQL TOP, LIMIT sau ROWNUM

Clauzele SQL TOP, LIMIT sau ROWNUM
Clauza SQL SELECT TOP
Clauza SELECT TOP este utilizată pentru a specifica numărul de înregistrări de returnat.
Clauza SELECT TOP este utilă pe tabele mari cu mii de înregistrări. Restituirea unui număr mare de înregistrări poate afecta performanța.
Nu toate sistemele de baze de date acceptă clauza SELECT TOP. MySQL acceptă clauza LIMIT pentru a selecta un număr limitat de înregistrări, în timp ce Oracle utilizează ROWNUM.
Sintaxa SQL Server / MS Access
SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;
Sintaxa MySQL 
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
Sintaxa Oracle
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
Exemple SQL TOP, LIMIT și ROWNUM
Următoarea instrucțiune SQL selectează primele trei înregistrări din tabelul „Customers”:
SELECT TOP 3 * FROM Customers;
Următoarea instrucțiune SQL arată exemplul echivalent folosind clauza LIMIT:
SELECT * FROM Customers
LIMIT 3;
Următoarea instrucțiune SQL arată exemplul echivalent folosind ROWNUM:
SELECT * FROM Customers
WHERE ROWNUM <= 3;
Exemplu SQL TOP PERCENT
Următoarea instrucțiune SQL selectează primele 50% de înregistrări din tabelul „Customers”:
SELECT TOP 50 PERCENT * FROM Customers;
Adăugați o clauză WHERE
Următoarea declarație SQL selectează primele trei înregistrări din tabelul „Customers”, unde țara este „Germania”:
SELECT TOP 3 * FROM Customers
WHERE Country='Germania';
Următoarea instrucțiune SQL arată exemplul echivalent folosind clauza LIMIT:
SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;
Următoarea instrucțiune SQL arată exemplul echivalent folosind clauza ROWNUM:
SELECT * FROM Customers
WHERE Country='Germania' AND ROWNUM <= 3;

SQL UNION

Operatorul SQL UNION
Operatorul UNION este utilizat pentru a combina setul de rezultate a două sau mai multe declarații SELECT.
Fiecare declarație SELECT din UNION trebuie să aibă același număr de coloane
Coloanele trebuie să aibă, de asemenea, tipuri de date similare
Coloanele din fiecare instrucțiune SELECT trebuie să fie, de asemenea, în aceeași ordine
Sintaxa UNION
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Sintaxa UNION ALL
Operatorul UNION selectează în mod implicit doar valori distincte. Pentru a permite valori duplicate, utilizați UNION ALL:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
Numele coloanelor din setul de rezultate sunt de obicei egale cu numele coloanelor din prima declarație SELECT din UNION.
Exemplu SQL UNION
Următoarea instrucțiune SQL returnează orașele (doar valori distincte) atât din „Clienți” (Customers), cât și din „Furnizori” (Suppliers):
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
Dacă unii clienți (customers) sau furnizori (suppliers) au același oraș, fiecare oraș va fi listat o singură dată, deoarece UNION selectează doar valori distincte. Utilizați UNION ALL pentru a selecta, de asemenea, valori duplicate!
Exemplu SQL UNION ALL
Următoarea instrucțiune SQL returnează orașele (de asemenea, valori duplicate) atât din tabela „Clienți” (Customers), cât și din „Furnizori” (Suppliers):
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;
SQL UNION cu WHERE
Următoarea instrucțiune SQL returnează orașele germane (doar valori distincte) atât din tabela „Clienți” (Customers), cât și din „Furnizori” (Suppliers):
SELECT City, Country FROM Customers
WHERE Country='Germania'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germania'
ORDER BY City;
SQL UNION ALL cu WHERE
Următoarea instrucțiune SQL returnează orașele germane (de asemenea, valori duplicate) atât din tabela „Clienți” (Customers), cât și din „Furnizori” (Suppliers):
SELECT City, Country FROM Customers
WHERE Country='Germania'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germania'
ORDER BY City;
Un alt exemplu UNION
Următoarea instrucțiune SQL listează toți clienții (customers) și furnizorii (suppliers):
SELECT 'Customer' As Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;
Observați „AS Type” de mai sus - este un alias. Alias-urile SQL sunt utilizate pentru a da un nume temporar unei tabele sau unei coloane. Un alias există doar pe durata interogării. Așadar, aici am creat o coloană temporară numită „Tip” (Type), care listează dacă persoana de contact este „Client” (Customer) sau „Furnizor” (Supplier).

SQL CASE

SQL CASE
Instrucțiunea SQL CASE
Instrucțiunea CASE trece prin condiții și returnează o valoare atunci când este îndeplinită prima condiție (ca o instrucțiune IF-THEN-ELSE). Deci, odată ce o condiție este adevărată, aceasta va opri citirea și va returna rezultatul. Dacă condițiile nu sunt adevărate, aceasta returnează valoarea în clauza ELSE.
Dacă nu există nici o parte ELSE și nici o condiție nu este adevărată, se returnează NULL.
Sintaxa CASE
CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;
Exemple SQL CASE
Următorul SQL trece prin condiții și returnează o valoare atunci când este îndeplinită prima condiție:
SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN "The quantity is greater than 30"
    WHEN Quantity = 30 THEN "The quantity is 30"
    ELSE "The quantity is under 30"
END AS QuantityText
FROM OrderDetails;
Următorul SQL va ordona (order) clienții (customers) după oraș. Cu toate acestea, dacă orașul este NULL, atunci ordonați (order) după țară:
SELECT CustomerName, City, Country
FROM Customers
ORDER BY
(CASE
    WHEN City IS NULL THEN Country
    ELSE City
END);

SQL BACKUP DATABASE

SQL BACKUP DATABASE 
SQL BACKUP DATABASE pentru SQL Server
Instrucțiunea SQL BACKUP DATABASE
Instrucțiunea BACKUP DATABASE este utilizată în SQL Server pentru a crea o copie de rezervă completă a unei baze de date SQL existente.
Sintaxă
BACKUP DATABASE databasename
TO DISK = 'filepath';
Instrucțiunea SQL BACKUP WITH DIFFERENTIAL
O copie de rezervă diferențială (differential back up) face doar backup pentru părțile bazei de date care s-au modificat de la ultima copie de rezervă completă a bazei de date.
Sintaxă
BACKUP DATABASE databasename
TO DISK = 'filepath'
WITH DIFFERENTIAL;
Exemplu BACKUP DATABASE 
Următoarea instrucțiune SQL creează o copie de rezervă completă (full back up) a bazei de date existente "testDB" pe discul D:
BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak';
Faceți întotdeauna o copie de siguranță (back up) a bazei de date pe o unitate diferită de baza de date reală. Apoi, dacă primiți un crash pe disc, nu veți pierde fișierul dvs. de rezervă împreună cu baza de date.
Exemplu BACKUP WITH DIFFERENTIAL
Următoarea instrucțiune SQL creează o copie de rezervă diferențială (differential back up) a bazei de date "testDB":
BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak'
WITH DIFFERENTIAL;

 

SQL CREATE TABLE

SQL CREATE TABLE
Instrucțiunea SQL CREATE TABLE
Instrucțiunea CREATE TABLE este utilizată pentru a crea o nouă tabelă într-o bază de date.
Sintaxă
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
Parametrii coloanelor specifică numele coloanelor tabelului.
Parametrul datatype specifică tipul de date pe care le poate deține coloana (de exemplu, varchar, integer, date, etc.).
Exemplu SQL CREATE TABLE
Următorul exemplu creează un tabel numit „Persoane” (Persons) care conține cinci coloane: PersonID, LastName, FirstName, Address și City:
CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);
Coloana PersonID este de tip int și va deține un numar intreg (integer).
Coloanele LastName, FirstName, Address și City sunt de tip varchar și vor conține caractere (characters), iar lungimea maximă pentru aceste câmpuri este de 255 de caractere.
Tabelul gol „Persoane” (Persons) poate fi completat acum cu date cu instrucțiunea SQL INSERT INTO.
Creați o tabelă folosind o altă tabelă
O copie a unui tabel existent poate fi, de asemenea, creată folosind CREATE TABLE.
Noul tabel primește aceleași definiții ale coloanei. Toate coloanele sau coloanele specifice pot fi selectate.
Dacă creați o nouă tabelă folosind o tabelă existentă, noua tabelă va fi completată cu valorile existente din tabelul vechi.
Sintaxă
CREATE TABLE new_table_name AS
    SELECT column1, column2,...
    FROM existing_table_name
    WHERE ....;
Următorul SQL creează un nou tabel numit "TestTables" (care este o copie a tabelului "Clienți" (Customers)):
CREATE TABLE TestTable AS
SELECT customername, contactname
FROM customers;

SQL Restricții

SQL Constraints
Limitările SQL
Restricțiile SQL sunt utilizate pentru a specifica regulile pentru datele dintr-un tabel.
SQL Creare constrângeri
Constrângerile pot fi specificate atunci când tabela este creată cu instrucțiunea CREATE TABLE sau după crearea tabelului cu instrucțiunea ALTER TABLE.
Sintaxă
CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    column3 datatype constraint,
    ....
);
Limitările SQL
Restricțiile SQL sunt utilizate pentru a specifica regulile pentru datele dintr-un tabel.
Constrângerile sunt utilizate pentru a limita tipul de date care poate intra într-un tabel. Aceasta asigură precizia și fiabilitatea datelor din tabel. Dacă există o încălcare între constrângere și acțiunea de date, acțiunea este anulată.
Constrângerile pot fi la nivel de coloană sau de tabel. Restricțiile de nivel de coloană se aplică unei coloane și restricțiile de nivel de tabel se aplică întregii tabele.
Următoarele constrângeri sunt utilizate în mod obișnuit în SQL:
NOT NULL - Se asigură că o coloană nu poate avea o valoare NULL
UNIQUE - Se asigură că toate valorile dintr-o coloană sunt diferite
PRIMARY KEY - O combinație între NOT NULL ȘI UNIQUE. Identifică în mod unic fiecare rând dintr-un tabel
FOREIGN KEY - Identifică un rând / o înregistrare într-un alt tabel
CHECK - Se asigură că toate valorile dintr-o coloană îndeplinesc o condiție specifică
DEFAULT - Setează o valoare implicită pentru o coloană atunci când nu este specificată nicio valoare
INDEX - Folosit pentru a crea și recupera rapid datele din baza de date

SQL UNIQUE

SQL Constrângere UNIQUE (SQL UNIQUE Constraint)
Constrângerea UNIQUE asigură că toate valorile dintr-o coloană sunt diferite.
Atât constrângerile UNIQUE, cât și cele PRIMARY KEY oferă o garanție de unicitate pentru o coloană sau un set de coloane.
O constrângere PRIMARY KEY  are automat o restricție UNIQUE.
Cu toate acestea, puteți avea multe constrângeri UNIQUE pe tabelă, dar o singură restricție PRIMARY KEY pe tabelă.
SQL UNIQUE Constraint on CREATE TABLE
Următorul SQL creează o restricție UNIQUE în coloana „ID” atunci când este creată tabela „Persoane” (Persons):
SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
    ID int NOT NULL UNIQUE,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);
MySQL:

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    UNIQUE (ID)
);
Pentru a denumi o constrângere UNIQUE și pentru a defini o restricție UNIQUE pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
SQL UNIQUE Constraint on ALTER TABLE
Pentru a crea o restricție UNIQUE în coloana „ID” atunci când tabelul este deja creat, utilizați următorul SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD UNIQUE (ID);
Pentru a denumi o constrângere UNIQUE și pentru a defini o restricție UNIQUE pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName);
DROP a UNIQUE Constraint
Pentru a elimina o restricție UNIQUE, utilizați următorul SQL:
MySQL:
ALTER TABLE Persons
DROP INDEX UC_Person;
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT UC_Person;

SQL PRIMARY KEY

SQL PRIMARY KEY
SQL Limitarea PRIMARY KEY (SQL PRIMARY KEY Constraint)
Limitarea PRIMARY KEY (PRIMARY KEY Constraint) identifică în mod unic fiecare înregistrare dintr-un tabel.
Primary keys trebuie să conțină valori UNIQUE și nu pot conține valori NULL.
Un tabel poate avea doar O (ONE) cheie primară (primary key); iar în tabel, această cheie primară (primary key) poate consta din coloane simple sau multiple (câmpuri).
SQL PRIMARY KEY în CREATE TABLE
Următorul SQL creează o PRIMARY KEY în coloana „ID” când se creează tabelul „Persoane” (Persons):
MySQL:
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (ID)
);
SQL Server / Oracle / MS Access:

CREATE TABLE Persons (
    ID int NOT NULL PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);
Pentru a permite denumirea unei restricții PRIMARY KEY și pentru a defini o restricție PRIMARY KEY pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
);
În exemplul de mai sus, există doar ONE PRIMARY KEY (PK_Person). Cu toate acestea, VALUE (valoarea) cheii primare (primary key) este alcătuită din TWO COLUMNS (ID + LastName).
SQL PRIMARY KEY în ALTER TABLE
Pentru a crea o restricție PRIMARY KEY în coloana „ID” atunci când tabelul este deja creat, utilizați următorul SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD PRIMARY KEY (ID);
Pentru a permite denumirea unei restricții PRIMARY KEY și pentru a defini o restricție PRIMARY KEY pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);
Dacă utilizați instrucțiunea ALTER TABLE pentru a adăuga o cheie primară (primary key), coloana cheii primare (primary key) trebuie să fi fost deja declarată că nu conține valori NULL (când a fost creat tabelul pentru prima dată).
Renunțare la o restricție PRIMAR KEY (DROP a PRIMARY KEY Constraint)
Pentru a renunța la o restricție PRIMAR KEY, utilizați următorul SQL:
MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY;
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT PK_Person;

SQL FOREIGN KEY

SQL FOREIGN KEY 
SQL Constrângere FOREIGN KEY (SQL FOREIGN KEY Constraint)
O FOREIGN KEY este o cheie folosită pentru a lega două tabele între ele.
O FOREIGN KEY este un câmp (sau o colecție de câmpuri) dintr-un tabel care se referă la FOREIGN KEY dintr-un alt tabel.
Tabelul care conține cheia străină (foreign key) se numește tabel copil (child table), iar tabelul care conține cheia candidat (candidate key) este denumit referință sau tabel părinte (parent table).
Creați două tabele:
Tabelul „Persoane” (Persons):
Tabelul „Comenzi” (Orders):
Observați că coloana „PersonID” din tabelul „Comenzi” (Orders) indică coloana „PersonID” din tabelul „Persoane” (Persons).
Coloana „PersonID” din tabelul „Persoane” (Persons) este PRIMARY KEY din tabelul „Persoane” (Persons).
Coloana „PersonID” din tabelul „Comenzi” (Orders) este o FOREIGN KEY din tabelul „Comenzi” (Orders).
Limitarea FOREIGN KEY este utilizată pentru a preveni acțiunile care ar distruge legăturile dintre tabele.
Restrângerea FOREIGN KEY împiedică, de asemenea, introducerea datelor nevalide în coloana de cheie străină (foreign key), deoarece aceasta trebuie să fie una dintre valori.
SQL FOREIGN KEY în CREATE TABLE
Următorul SQL creează un FOREIGN KEY în coloana „PersonID” atunci când se creează tabelul „Comenzi” (Orders):
MySQL:
CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
    OrderID int NOT NULL PRIMARY KEY,
    OrderNumber int NOT NULL,
    PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
Pentru a permite denumirea unei restricții FOREIGN KEY și pentru a defini o restricție FOREIGN KEY pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
    REFERENCES Persons(PersonID)
);
SQL FOREIGN KEY în ALTER TABLE
Pentru a crea o restricție FOREIGN KEY în coloana „PersonID” atunci când tabelul „Comenzi” (Orders) este deja creat, utilizați următorul SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
Pentru a permite denumirea unei constrângeri FOREIGN KEY și pentru a defini o restricție FOREIGN KEY pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
Eliminare restricție FOREIGN KEY (DROP a FOREIGN KEY Constraint)
Pentru a elimina o restricție FOREIGN KEY, utilizați următorul SQL:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;

SQL AUTO INCREMENT

SQL Câmpul AUTO INCREMENT
Câmpul AUTO INCREMENT
Auto-increment permite un număr unic de generat automat atunci când o nouă înregistrare este introdusă într-un tabel.
Adesea, acesta este câmpul cheie principal (primary key field) pe care am dori să fie creat automat de fiecare dată când se introduce o nouă înregistrare.
Sintaxa pentru MySQL
Următoarea instrucțiune SQL definește coloana "Personid" pentru a fi un câmp cheie primară (primary key field) cu auto-increment din tabelul "Persoane" (Persons):
CREATE TABLE Persons (
    Personid int NOT NULL AUTO_INCREMENT,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (Personid)
);
MySQL folosește cuvântul cheie (keyword) AUTO_INCREMENT pentru a efectua o funcție auto-increment.
În mod implicit, valoarea de pornire pentru AUTO_INCREMENT este 1 și va crește cu 1 pentru fiecare înregistrare nouă.
Pentru a permite ca secvența AUTO_INCREMENT să înceapă cu o altă valoare, utilizați următoarea instrucțiune SQL:
ALTER TABLE Persons AUTO_INCREMENT=100;
Pentru a insera o înregistrare nouă în tabelul „Persoane” (Persons), NU (NOT) va trebui să specificăm o valoare pentru coloana „Personid” (o valoare unică va fi adăugată automat):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Ion','Popescu');
Declarația SQL de mai sus ar insera o nouă înregistrare în tabelul „Persoane”(Persons). Coloanei „Personid” i se va atribui o valoare unică. Coloana „FirstName” ar fi setată la „Ion”, iar coloana „LastName” ar fi setată la „Popescu”.
Sintaxa pentru SQL Server
Următoarea instrucțiune SQL definește coloana "Personid" pentru a fi un câmp cheie primară (primary key field) cu auto-increment in tabelul "Persoane" (Persons):
CREATE TABLE Persons (
    Personid int IDENTITY(1,1) PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);
MS SQL Server folosește cuvântul cheie (primary key) IDENTITY pentru a efectua o funcție de auto-increment (auto-increment feature).
În exemplul de mai sus, valoarea de pornire pentru IDENTITY este 1 și va crește cu 1 pentru fiecare înregistrare nouă.
Pentru a specifica că coloana „Personid” ar trebui să înceapă la valoarea 10 și să crească cu 5, schimbați-o în IDENTITY(10,5)
Pentru a insera o înregistrare nouă în tabelul „Persoane” (Persons), NU (NOT) va trebui să specificăm o valoare pentru coloana „Personid” (o valoare unică va fi adăugată automat):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Ion','Popecu');
Declarația SQL de mai sus ar insera o nouă înregistrare în tabelul „Persoane” (Persons). Coloanei „Personid” i se va atribui o valoare unică. Coloana „FirstName” ar fi setată la „Ion”, iar coloana „LastName” ar fi setată la „Popescu”.
Sintaxa pentru Access
Următoarea instrucțiune SQL definește coloana "Personid" pentru a fi un câmp cheie primară cu auto-increment (auto-increment primary key field) în tabelul "Persoane" (Persons):
CREATE TABLE Persons (
    Personid AUTOINCREMENT PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);
MS Access utilizează cuvântul cheie (keyword) AUTOINCREMENT pentru a efectua o funcție auto-increment (auto-increment feature).
În mod implicit, valoarea de pornire pentru AUTOINCREMENT este 1 și va crește cu 1 pentru fiecare înregistrare nouă.
Pentru a specifica că coloana „Personid” ar trebui să înceapă la valoarea 10 și să crească cu 5, schimbați autoincrementul în AUTOINCREMENT(10,5).
Pentru a insera o înregistrare nouă în tabelul „Persoane” (Persons), NU (NOT) va trebui să specificăm o valoare pentru coloana „Personid” (o valoare unică va fi adăugată automat):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Ion','Popescu');
Declarația SQL de mai sus ar insera o nouă înregistrare în tabelul „Persoane”(Persons). Coloanei „Personid” i se va atribui o valoare unică. Coloana „FirstName” ar fi setată la „Ion”, iar coloana „LastName” ar fi setată la „Popescu”.
Sintaxa pentru Oracle
În Oracle codul este puțin mai complicat.
Va trebui să creați un câmp cu auto-increment (auto-increment field) cu obiectul secvenței (sequence object) (acest obiect generează o secvență numerică).
Utilizați următoarea sintaxă CREATE SEQUENCE:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10;
Codul de mai sus creează un obiect de secvență (sequence object) numit seq_person, care începe cu 1 și va crește cu 1. De asemenea, va stoca (cache) până la 10 valori pentru performanță. Opțiunea cache specifică câte valori de secvență (sequence values) vor fi stocate în memorie pentru acces mai rapid.
Pentru a introduce o nouă înregistrare în tabelul „Persoane” (Persons), va trebui să folosim funcția nextval (această funcție preia următoarea valoare din secvența seq_person):
INSERT INTO Persons (Personid,FirstName,LastName)
VALUES (seq_person.nextval,'Ion','Popescu');
Declarația SQL de mai sus ar insera o nouă înregistrare în tabelul „Persoane” (Persons). Coloana „Personid” avea să i se atribuie următorul număr din secvența seq_person. Coloana „FirstName” ar fi setată la „Ion”, iar coloana „LastName” ar fi setată la „Popescu”.

PHP Introducere

PHP Introducere
Codul PHP este executat pe server.
HTML
CSS
JavaScript
Ce este PHP?
PHP este un acronim pentru "PHP: Hypertext Preprocessor"
PHP este un limbaj de scripturi de surse deschise, utilizat pe scară largă
Scripturile PHP sunt executate pe server
PHP se poate descărca și utiliza gratuit
PHP este un limbaj uimitor și popular!
Este suficient de puternic pentru a fi în centrul celui mai mare sistem de blogging de pe web (WordPress)!
Este suficient de adânc pentru a rula cea mai mare rețea de socializare (Facebook)!
Ce poate face PHP?
PHP poate genera conținut dinamic al paginii
PHP poate crea, deschide, citi, scrie, șterge și închide fișiere pe server
PHP poate colecta date de formular
PHP poate trimite și primi cookie-uri
PHP poate adăuga, șterge, modifica date din baza de date
PHP poate fi utilizat pentru a controla accesul utilizatorului
PHP poate cripta dateCu PHP nu ești limitat la output HTML. Puteți output imagini, fișiere PDF și chiar filme Flash. De asemenea, puteți output orice text, cum ar fi XHTML și XML.
De ce PHP?
PHP rulează pe diverse platforme (Windows, Linux, Unix, Mac OS X etc.)
PHP este compatibil cu aproape toate serverele folosite astăzi (Apache, IIS etc.)
PHP acceptă o gamă largă de baze de date
PHP este gratuit. Descărcați-l din resursa oficială PHP: www.php.net
PHP este ușor de învățat și rulează eficient pe serverCe este nou în PHP 7
PHP 7 este mult mai rapid decât versiunea stabilă și populară anterioară(PHP 5.6)
PHP 7 a îmbunătățit gestionarea erorilor
PHP 7 acceptă declarații de tip (Type Declarations) mai stricte pentru argumentele funcției
PHP 7 acceptă operatori noi (cum ar fi operatorul național spațial: <=>)

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 String

Un string (șir) este o secvență de caractere, precum „Hello world!”.
Funcții PHP String
În acest capitol vom analiza unele funcții utilizate frecvent pentru manipularea string-urilor (șirurilor).
strlen() - întoarce lungimea unui string (șir)
Funcția PHP strlen() returnează lungimea unui string (șir).
Întoarceți lungimea string-ului (șirului) „Hello world!”:
<?php
echo strlen("Hello world!"); // outputs 12 (12  ieșiri)
?>
str_word_count() - Numără cuvintele într-un string (șir)
Funcția PHP str_word_count() numără numărul de cuvinte dintr-un string (șir).
Numărați numărul de cuvinte din string-ul (șirul) „Hello world!”:
<?php
echo str_word_count("Hello world!"); // outputs 2 (2  ieșiri)
?>
strrev() - inversează un string (șir)
Funcția PHP strrev() inversează un string (șir).
Inversați string- ul (șirul) „Hello world!”:
<?php
echo strrev("Hello world!"); // outputs !dlrow olleH (ieșiri! dlrow olleH)
?>
strpos() - Căutați un text într-un string (șir)
Funcția PHP strpos() caută un text specific într-un string (șir). Dacă se găsește o potrivire, funcția returnează poziția caracterului primei potriviri. Dacă nu se găsește nicio potrivire, aceasta va returna FALSE.
Căutați textul „world” în string-ul (șirul) „Hello world!”:
<?php
echo strpos("Hello world!", "world"); // outputs 6 (6 ieșiri)
?>
Prima poziție a caracterelor dintr-un string (șir) este 0 (nu 1).
str_replace() - Înlocuiți textul într-un string (șir)
Funcția PHP str_replace() înlocuiește unele caractere cu alte caractere dintr-un string (șir).
Înlocuiți textul „world” cu „Dolly”:
<?php
echo str_replace("world", "Dolly", "Hello world!"); // outputs Hello Dolly! (ieșiri Hello Dolly!)
?>
Referință completă PHP pentru string-uri (șiruri)
Referința string-ului (șirului) PHP conține descrierea și exemplul de utilizare, pentru fiecare funcție!

PHP if...else...elseif

Instrucțiunile PHP if...else...elseif
Instrucțiunile condiționale sunt utilizate pentru a efectua diferite acțiuni bazate pe condiții diferite.
Instrucțiuni condiționale PHP
Foarte des când scrieți cod, doriți să efectuați diferite acțiuni pentru diferite condiții. Pentru a face acest lucru puteți utiliza în codul dvs. instrucțiuni condiționale.
În PHP avem următoarele instrucțiuni condiționale:
if statement - execută unele coduri dacă o condiție este adevărată
if ... else statement - execută ceva cod dacă o condiție este adevărată și un alt cod dacă această condiție este falsă
if ... elseif ... else statement - execută coduri diferite pentru mai mult de două condiții
switch statement - selectează unul dintre numeroasele blocuri de cod care trebuie executate
PHP - Instrucțiunea if
Instrucțiunea if execută un cod dacă o condiție este adevărată.
Sintaxă
if (condition) {
    cod care trebuie executat dacă condiția este adevărată (true);
}
<?php
$t = date("H");
if ($t < "20") {
    echo "Să aveți o zi bună!";
}
?>
Instrucțiunea PHP - The if...else 
Instrucțiunea if ... else execută un cod dacă o condiție este adevărată (true) și un alt cod dacă această condiție este falsă (false).
Sintaxă
if (condition) {
    cod care trebuie executat dacă condiția este adevărată (true);
} else {
    cod care trebuie executat dacă condiția este falsă (false);
}
<?php
$t = date("H");
if ($t < "20") {
    echo "Să aveți o zi bună!";
} else {
    echo "Noapte bună!";
}
?>
Instrucțiunea PHP -  if...elseif...else
Instrucțiunea if ... elseif ... else execută coduri diferite pentru mai mult de două condiții.
Sintaxă
if (condition) {
     cod care trebuie executat dacă această condiție este adevărată (true);
} elseif (condition) {
     cod care trebuie executat dacă prima condiție este falsă (false) și această condiție este adevărată (true);
} else {
    cod care trebuie executat dacă toate condițiile sunt false (false);
}
<?php
$t = date("H");
if ($t < "10") {
    echo "Bună dimineața!";
} elseif ($t < "20") {
    echo "Să aveți o zi bună!";
} else {
    echo "Noapte bună!";
}
?>
Instrucțiunea PHP- switch 
Instrucțiunea switch va fi explicată în capitolul următor.

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 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 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 Fișierele Create/Write

PHP Fișierele Create/Write
În acest capitol vă vom învăța cum să creați și să scrieți într-un fișier pe server.
PHP Create File - fopen()
Funcția fopen() este de asemenea folosită pentru a crea un fișier. Poate un pic confuz, dar în PHP, un fișier este creat folosind aceeași funcție folosită pentru a deschide fișiere.
Dacă utilizați fopen() pe un fișier care nu există, acesta îl va crea, având în vedere că fișierul este deschis pentru scriere (writing) (w) sau anexare (appending) (a).
Exemplul de mai jos creează un nou fișier numit "testfile.txt". Fișierul va fi creat în același director în care se află codul PHP:
$myfile = fopen("testfile.txt", "w")
PHP File Permissions
Funcția fwrite() este utilizată pentru a scrie (write) într-un fișier.
Primul parametru fwrite() conține numele fișierului la care trebuie să scrieți (write), iar al doilea parametru este șirul (string) care trebuie scris.
Exemplul de mai jos scrie (write) câteva nume într-un fișier nou numit "newfile.txt":
<?php
$myfile = fopen("newfile.txt", "w") or die("Nu se poate deschide fișierul!");
$txt = "Ion Popescu\n";
fwrite($myfile, $txt);
$txt = "Ioana Popescu\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
Observați că am scris (write) fișierului "newfile.txt" de două ori. De fiecare dată când am scris în fișier, am trimis șirul (stringul) $txt care a conținut mai întâi „Ion Popescu” și al doilea conținut „Ioana Popescu”. După ce am terminat de scris (write), am închis fișierul folosind funcția fclose().
Dacă deschidem fișierul "newfile.txt", ar arăta astfel:
Ion Popescu
Ioana Popescu
Suprascriere PHP (PHP Overwriting)
Acum, că „newfile.txt” conține câteva date, putem arăta ce se întâmplă atunci când deschidem un fișier existent pentru scriere. Toate datele existente vor fi ERASED și vom începe cu un fișier gol.
În exemplul de mai jos, deschidem fișierul nostru existent "newfile.txt" și scriem câteva date noi în el:
<?php
$myfile = fopen("newfile.txt", "w") or die("Nu se poate deschide fișierul!");
$txt = "Mickey Mouse\n";
fwrite($myfile, $txt);
$txt = "Minnie Mouse\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
Dacă acum deschidem fișierul "newfile.txt", atât Ion cât și Ioana au dispărut, și doar datele pe care tocmai le-am scris sunt prezente:
Mickey Mouse
Minnie Mouse

PHP Fișierul Upload

PHP Încărcare fișier (PHP File Upload)
Cu PHP, este ușor să încărcați fișiere pe server.
Cu toate acestea, cu ușurință apare un pericol, așa că întotdeauna aveți grijă atunci când permiteți încărcarea fișierelor!
Configurați fișierul "php.ini"
În primul rând, asigurați-vă că PHP este configurat pentru a permite încărcarea fișierelor.
În fișierul dvs. "php.ini", căutați directiva file_uploads și setați-l pe On:
file_uploads = On
Creați formularul HTML
Apoi, creați un formular HTML care permite utilizatorilor să aleagă fișierul imagine (image file ) pe care doresc să îl încarce:
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
     Selectați imaginea de încărcat:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Încărcați imaginea" name="submit">
</form>
</body>
</html>
Câteva reguli de urmat pentru formularul HTML de mai sus:
Asigurați-vă că formularul folosește method="post"
De asemenea, formularul are nevoie de următorul atribut: enctype = "multipart/form-data". Acesta specifică ce tip de conținut (content-type) trebuie utilizat la trimiterea formularului
Fără cerințele de mai sus, încărcarea fișierului nu va funcționa.
Alte lucruri de remarcat:
Atributul type="file" al etichetei (tag) <input> arată câmpul de intrare (input field) ca un control de selectare a fișierelor (file-select control), cu un buton "Browse" lângă controlul de intrare
Formularul de mai sus trimite date unui fișier numit „upload.php”, pe care îl vom crea în continuare.
PHP Creați scriptul de încărcare (Create The Upload File PHP Script)
Fișierul "upload.php" conține codul pentru încărcarea unui fișier:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Verificați dacă fișierul imagine este o imagine reală sau o imagine falsă
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "Fișierul este o imagine - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "Fișierul nu este o imagine.";
        $uploadOk = 0;
    }
}
?>
Script PHP explicat:
$target_dir = "uploads/" - specifică directorul în care urmează să fie plasat fișierul
$target_file - specifică calea fișierului care va fi încărcat
$uploadOk=1 - nu este încă utilizat (va fi folosit ulterior)
$imageFileType - reține extensia fișierului (în minuscule/lower case)
În continuare, verificați dacă fișierul imagine este o imagine reală sau o imagine falsă
Va trebui să creați un nou director numit „uploads” în directorul în care se află fișierul „upload.php”. Fișierele încărcate vor fi salvate acolo.
Verificați dacă fișierul există deja
Acum putem adăuga câteva restricții.
În primul rând, vom verifica dacă fișierul există deja în folderul „uploads”. În acest caz, este afișat un mesaj de eroare și $uploadOk este setat la 0:
// Verificați dacă fișierul există deja
if (file_exists($target_file)) {
    echo "Ne pare rău, fișierul există deja.";
    $uploadOk = 0;
}
Limitați dimensiunea fișierului (Limit File Size)
Câmpul de introducere (input field) a fișierului în formularul nostru HTML de mai sus este denumit "fileToUpload".
Acum, vrem să verificăm dimensiunea fișierului. Dacă fișierul este mai mare de 500KB, este afișat un mesaj de eroare și
$uploadOk este setat la 0:
// Verificați dimensiunea fișierului
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Ne pare rău, fișierul dvs. este prea mare.";
    $uploadOk = 0;
}
//  Permiteți anumite formate de fișiere
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Ne pare rău, sunt permise doar fișierele JPG, JPEG, PNG și GIF.";
    $uploadOk = 0;
}
Încărcați complet scriptul PHP (Complete Upload File PHP Script)
Fișierul complet "upload.php" arată acum astfel:
 <?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Verificați dacă fișierul imagine este o imagine reală sau o imagine falsă
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "Fișierul este o imagine - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "Fișierul nu este o imagine.";
        $uploadOk = 0;
    }
}
// Verificați dacă fișierul există deja
if (file_exists($target_file)) {
    echo "Ne pare rău, fișierul există deja.";
    $uploadOk = 0;
}
// Verificați dimensiunea fișierului
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Ne pare rău, fișierul dvs. este prea mare.";
    $uploadOk = 0;
}
// Permiteți anumite formate de fișiere
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Ne pare rău, sunt permise doar fișierele JPG, JPEG, PNG și GIF.";
    $uploadOk = 0;
}
// Verificați dacă $uploadOk este setat la 0 printr-o eroare
if ($uploadOk == 0) {
    echo "Ne pare rău, fișierul dvs. nu a fost încărcat.";
// dacă totul este în regulă, încercați să încărcați fișierul
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "Fișierul ". basename( $_FILES["fileToUpload"]["name"]). " a fost încărcat.";
    } else {
        echo "Ne pare rău, a fost o eroare la încărcarea fișierului.";
    }
}
?>

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 JSON

PHP și JSON
Ce este JSON?
JSON reprezintă o notare a obiectului JavaScript (JavaScript Object Notation) și este o sintaxă pentru stocarea și schimbul de date.
Deoarece formatul JSON este un format bazat pe text (text-based format), acesta poate fi trimis cu ușurință la și de la un server și utilizat ca format de date de orice limbaj de programare.
PHP și JSON
PHP are unele funcții integrate (built-in functions) pentru a gestiona JSON.
În primul rând, vom analiza următoarele două funcții:
json_encode()
json_decode()
PHP - json_encode()
Funcția json_encode() este utilizată pentru a codifica o valoare în formatul JSON.
Acest exemplu arată modul de codificare a unui tablou asociativ (associative array) într-un obiect JSON:
<?php
$age = array("Petre"=>35, "Ion"=>37, "Alex"=>43);
echo json_encode($age);
?>
Acest exemplu arată modul de codificare a unui tablou indexat (indexed array) într-un tablou (array) JSON:
<?php
$cars = array("Volvo", "BMW", "Toyota");
echo json_encode($cars);
?>
PHP - json_decode()
Funcția json_decode() este utilizată pentru a decoda un obiect JSON (JSON object) într-un obiect PHP (PHP object) sau într-un tablou asociativ (associative array).
Acest exemplu decodează datele JSON (JSON data) într-un obiect PHP (PHP object):
<?php
$jsonobj = '{"Petre":35,"Ion":37,"Alex":43}';
var_dump(json_decode($jsonobj));
?>
Funcția json_decode() returnează în mod implicit un obiect. Funcția json_decode() are un al doilea parametru, iar atunci când este setată la adevărat (true), obiectele JSON (JSON objects) sunt decodate în tablele asociative (associative array).
Acest exemplu decodifică datele JSON (JSON data) într-un tablou asociativ PHP (PHP associative array):
<?php
$jsonobj = '{"Petre":35,"Ion":37,"Alex":43}';
var_dump(json_decode($jsonobj, true));
?>
PHP - Accesarea valorilor decodate
Iată două exemple despre cum să accesați valorile decodate dintr-un obiect și dintr-un tablou asociativ (associative array):
Acest exemplu arată cum să accesați valorile dintr-un obiect PHP (PHP object):
<?php
$jsonobj = '{"Petre":35,"Ion":37,"Alex":43}';
$obj = json_decode($jsonobj);
echo $obj->Petre;
echo $obj->Ion;
echo $obj->Alex;
?>
Acest exemplu arată cum să accesați valorile dintr-un tablou asociativ PHP (PHP associative array):
<?php
$jsonobj = '{"Petre":35,"Ion":37,"Alex":43}';
$arr = json_decode($jsonobj, true);
echo $arr["Petre"];
echo $arr["Ion"];
echo $arr["Alex"];
?>
PHP - Buclă prin valori (Looping Through the Values)
De asemenea, puteți bucla (loop) valorile cu o buclă (loop) foreach():
Acest exemplu arată cum să vă buclați (loop) prin valorile unui obiect PHP (PHP object):
<?php
$jsonobj = '{"Petre":35,"Ion":37,"Alex":43}';
$obj = json_decode($jsonobj);
foreach($obj as $key => $value) {
  echo $key . " => " . $value . "<br>";
}
?>
Acest exemplu arată cum să vă buclați (loop) prin valorile unui tablou asociativ PHP (PHP associative array):
<?php
$jsonobj = '{"Petre":35,"Ion":37,"Alex":43}';
$arr = json_decode($jsonobj, true);
foreach($arr as $key => $value) {
  echo $key . " => " . $value . "<br>";
}
?>

PHP OOP - Moștenire

PHP OOP - Inheritance
PHP - Ce este Inheritance?
Inheritance în OOP = Când o clasă derivă dintr-o altă clasă.
Clasa child (copil) va moșteni toate proprietățiile și metodele publice și protejate de la clasa parent (părinte). În plus, poate avea propriile sale proprietăți și metode.
O clasă inherited (moștenită) este definită folosind cuvântul cheie extensie (extends keyword).
Să ne uităm la un exemplu:
<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "Fructul este {$this->name} și culoarea este {$this->color}.";
  }
}
// Strawberry este moștenită (inherited) de la Fruit
class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
  }
}
$strawberry = new Strawberry("Strawberry", "red");
$strawberry->message();
$strawberry->intro();
?>
Exemplu explicat
Clasa Strawberry este moștenită (inherited) de la clasa Fruit.
Aceasta înseamnă că clasa Strawberry poate folosi numele public $name și proprietățiile $color, precum și metodele publice __construct() și intro() din clasa Fruit din cauza moștenirii (inheritance).
Clasa Strawberry are, de asemenea, propria sa metodă: message().
PHP - Inheritance și modificator access protejat
În capitolul anterior am aflat că proprietățiile sau metodele protejate pot fi accesate în cadrul clasei și prin clase derivate din acea clasă. Ce inseamna asta?
Să ne uităm la un exemplu:
<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "Fructul este {$this->name} și culoarea este {$this->color}.";
  }
}
class Strawberry extends Fruit {
  public function message() {
    echo "Sunt un fruit sau o berry? ";
  }
}
//  Încercați să apelați toate cele trei metode din afara clasei
$strawberry = new Strawberry("Strawberry", "red");  // OK. __construct() este public
$strawberry->message(); // OK. message() este public
$strawberry->intro(); // ERROR. intro() este protejat
?>
În exemplul de mai sus vedem că dacă încercăm să apelăm la o metodă protejată (intro()) din afara clasei, vom primi o eroare. Metodele publice vor funcționa bine!
Să ne uităm la un alt exemplu:
<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "Fructul este{$this->name} și culoarea este {$this->color}.";
  }
}
class Strawberry extends Fruit {
  public function message() {
    echo "Sunt un fruit sau o berry? ";
    // Apelați metoda protejată din cadrul clasei derivate - OK
    $this -> intro();
  }
}
$strawberry = new Strawberry("Strawberry", "red"); // OK. __construct() este public
$strawberry->message(); // OK. message() este public și apelează intro() (care este protejat) din cadrul clasei derivate
?>
În exemplul de mai sus vedem că toate funcționează bine! Se datorează faptului că numim metoda protejată (intro()) din interiorul clasei derivate.
PHP - Overriding Inherited Methods
Metodele moștenite (Inherited methods) pot fi anulate prin redefinirea metodelor (folosiți același nume) în clasa child (copil).
Priviți exemplul de mai jos. Metodele __construct() și intro() din clasa child (copil) (Strawberry) vor înlocui metodele __construct() și intro() din clasa parent (părinte) (Fruit):
<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "Fructul este {$this->name} și culoarea este {$this->color}.";
  }
}
class Strawberry extends Fruit {
  public $weight;
  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }
  public function intro() {
    echo "Fructul este {$this->name}, culoarea este {$this->color}, și greutatea este {$this->weight} gram.";
  }
}
$strawberry = new Strawberry("Strawberry", "red", 50);
$strawberry->intro();
?>
PHP - Cuvântul cheie final
Cuvântul cheie final (the final keyword) poate fi utilizat pentru a preveni moștenirea clasei (class inheritance) sau pentru a preveni suprasolicitarea metodei (method overriding).
Următorul exemplu arată cum să preveniți moștenirea clasei (class inheritance):
<?php
final class Fruit {
  // ceva cod
}
// va duce la eroare
class Strawberry extends Fruit {
  // ceva cod
}
?>
<?php
class Fruit {
  final public function intro() {
    // ceva cod
  }
}
class Strawberry extends Fruit {
  // va duce la eroare
  public function intro() {
    // ceva cod
  }
}
?>

PHP OOP - Trăsături

PHP OOP - Trăsături (PHP OOP - Traits)
PHP - Ce sunt trăsăturile? (PHP - What are Traits?)
PHP acceptă numai moștenirea unică (single inheritance): o clasă copil (child class) poate moșteni doar de la un singur părinte (parent).
Deci, dacă o clasă trebuie să moștenească mai multe comportamente? Trăsăturile OOP (OOP traits) rezolvă această problemă.
Trăsăturile (Traits) sunt utilizate pentru a declara metode care pot fi utilizate în mai multe clase. Trăsăturile pot avea metode (methods) și metode abstracte (abstract methods) care pot fi utilizate în mai multe clase, iar metodele (methods) pot avea orice modificator access (public, privat sau protejat).
Trăsăturile (Traits) sunt declarate cu ajutorul cuvântului cheie trait (trait keyword):
Sintaxă
<?php
trait TraitName {
  // ceva cod...
}
?>
Pentru a utiliza o trăsătură (trait) într-o clasă, utilizați cuvântul cheie de utilizare (use keyword):
<?php
class MyClass {
  use TraitName;
}
?>
Să ne uităm la un exemplu:
<?php
trait message1 {
public function msg1() {
    echo "OOP este distractiv! ";
  }
}
class Welcome {
  use message1;
}
$obj = new Welcome();
$obj->msg1();
?>
Exemplu explicat
Aici, declarăm o singură trăsătură (trait): message1. Apoi, creem o clasă: Welcome. Clasa utilizează trăsătura (trait) și toate metodele (methods) din trăsătură (trait) vor fi disponibile în clasă.
Dacă alte clase trebuie să utilizeze funcția msg1(), pur și simplu folosiți trăsătura (trait) message1 din acele clase. Acest lucru reduce duplicarea codului, deoarece nu este nevoie să redeclarați din nou aceeași metodă (method).
PHP - Folosirea mai multor trăsături (traits)
Să ne uităm la un alt exemplu:
<?php
trait message1 {
  public function msg1() {
    echo "OOP este distractiv! ";
  }
}
trait message2 {
  public function msg2() {
    echo "OOP reduce duplicarea codului!";
  }
}
class Welcome {
  use message1;
}
class Welcome2 {
  use message1, message2;
}
$obj = new Welcome();
$obj->msg1();
echo "<br>";
$obj2 = new Welcome2();
$obj2->msg1();
$obj2->msg2();
?>
Exemplu explicat
Aici, declarăm două trăsături (traits): message1 și message2. Apoi, creăm două clase: Welcome și Welcome2. Prima clasă (Welcome) folosește trăsături (traits) message1, iar cea de-a doua (Welcome2) folosește atât caracteristicile message1 cât și message2 (mai multe trăsături (traits) sunt separate prin virgulă).

PHP Conectare la MySQL

PHP Conectează-te la MySQL
PHP 5 și versiunile ulterioare pot lucra cu o bază de date MySQL folosind:
Extensia MySQLi („i” este îmbunătățită)
DPO (Obiecte de date PHP/PHP Data Objects)
Versiunile anterioare de PHP au folosit extensia MySQL. Cu toate acestea, această extindere a fost depășită în 2012.
Ar trebui să folosesc MySQLi sau PDO?
Dacă aveți nevoie de un răspuns scurt, ar fi „Orice dorți”.
Atât MySQLi, cât și PDO au avantajele lor:
PDO va funcționa pe 12 sisteme de baze de date diferite, în timp ce MySQLi va funcționa doar cu baze de date MySQL.
Deci, dacă trebuie să schimbați proiectul pentru a utiliza o altă bază de date, PDO ușurează procesul. Trebuie doar să schimbați șirul de conexiune (connection string) și câteva interogari (queries). Cu MySQLi, va trebui să rescrieți întregul cod - interogările (queries) incluse.
Ambele sunt orientate pe obiecte (object-oriented), dar MySQLi oferă și o API procedurală (procedural API).
Ambele acceptă declarații pregătite (Prepared Statements). Declarațiile pregătite (Prepared Statements) protejează împotriva injecției SQL și sunt foarte importante pentru securitatea aplicațiilor web.
Exemple MySQL atât în ​​MySQLi cât și în sintaxa PDO
Aici și în capitolele următoare vom demonstra trei moduri de a lucra cu PHP și MySQL:
MySQLi (orientat pe obiect/object-oriented)
MySQLi (procedural)
DOP
Instalare MySQLi
Pentru Linux și Windows: Extensia MySQLi este instalată automat în majoritatea cazurilor, atunci când este instalat pachetul mysql php5.
Pentru detalii despre instalare, accesați:
http://php.net/manual/en/mysqli.installation.php
Instalare DPO
Pentru detalii despre instalare, accesați: http://php.net/manual/en/pdo.installation.php
Deschideți o conexiune la MySQL
Înainte de a putea accesa datele din baza de date MySQL, trebuie să ne putem conecta la server:
Exemplu (MySQLi orientat pe obiect/MySQLi Object-Oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Creați conexiunea
$conn = new mysqli($servername, $username, $password);
// Verificați conexiunea
if ($conn->connect_error) {
    die("Conexiunea a eșuat: " . $conn->connect_error);
}
echo "Conectat cu succes";
?>
$connect_error a fost spart până la PHP 5.2.9 și 5.3.0. Dacă trebuie să vă asigurați compatibilitatea cu versiunile PHP înainte de 5.2.9 și 5.3.0, utilizați în schimb următorul cod:
// Verificați conexiunea
if (mysqli_connect_error()) {
    die("Conexiunea la baza de date a eșuat: " . mysqli_connect_error());
}
Exemplu (MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Creați conexiunea
$conn = mysqli_connect($servername, $username, $password);
// Verificați conexiunea
if (!$conn) {
    die("Conexiunea a eșuat: " . mysqli_connect_error());
}
echo "Conexiunea s-a realizat cu succes";
?>
Exemplu (PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
    $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
    // setați modul de eroare PDO la excepție
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Conectat cu succes";
    }
catch(PDOException $e)
    {
    echo "Conexiune eșuată: " . $e->getMessage();
    }
?>
În exemplul PDO de mai sus am specificat și o bază de date (myDB). PDO necesită o bază de date validă pentru a vă conecta. Dacă nu este specificată nicio bază de date, se face o excepție.
Un mare beneficiu al PDO este că are o clasă de excepție pentru a rezolva problemele care pot apărea în interogările noastre de baze de date (database queries). Dacă o excepție este făcută în block-ul try{}, scriptul nu mai este executat și curge direct către primul block catch(){}.
Închideți conexiunea
Conexiunea va fi închisă automat la finalizarea scriptului. Pentru a închide înainte conexiunea, utilizați următoarele:
MySQLi Object-Oriented:
$conn->close();
MySQLi Procedural:
mysqli_close($conn);
PDO:
$conn = null;

PHP Creare bază de date MySQL

PHP Creați o bază de date MySQL
O bază de date constă dintr-una sau mai multe tabele.
Veți avea nevoie de privilegii speciale CREATE pentru a crea sau pentru a șterge o bază de date MySQL.
Creați o bază de date MySQL folosind MySQLi și PDO
Instrucțiunea CREATE DATABASE este utilizată pentru a crea o bază de date în MySQL.
Următoarele exemple creează o bază de date denumită "myDB":
Exemplu (MySQLi Orientat pe obiect/MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Creați conexiunea
$conn = new mysqli($servername, $username, $password);
// Verificați conexiunea
if ($conn->connect_error) {
    die("Conexiunea a eșuat: " . $conn->connect_error);
}
// Creați baza de date
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
    echo "Baza de date creată cu succes";
} else {
    echo "Eroare la crearea bazei de date: " . $conn->error;
}
$conn->close();
?>
Când creați o bază de date nouă, trebuie să specificați doar primele trei argumente pentru obiectul mysqli (nume de server, nume de utilizator și parolă/servername, username and password).
Dacă trebuie să folosiți un port specific, adăugați un șir gol (empty string) pentru argumentul numelui bazei de date (database-name argument), astfel: new mysqli("localhost", "username", "password", "", port)
Exemplu (MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Creați conexiunea
$conn = mysqli_connect($servername, $username, $password);
// Verificați conexiunea
if (!$conn) {
    die("Conexiunea a eșuat: " . mysqli_connect_error());
}
// Creați baza de date
$sql = "CREATE DATABASE myDB";
if (mysqli_query($conn, $sql)) {
    echo "Bază de date creată cu succes";
} else {
    echo "Eroare la crearea bazei de date: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
Următorul exemplu PDO creează o bază de date denumită "myDBPDO":
Exemplu (PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
    $conn = new PDO("mysql:host=$servername", $username, $password);
    // setați modul de eroare PDO la excepție
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "CREATE DATABASE myDBPDO";
    // utilizați exec() deoarece nu se returnează niciun rezultat
    $conn->exec($sql);
    echo "Bază de date creată cu succes<br>";
    }
catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }
$conn = null;
?>
Un mare beneficiu al PDO este că are o clasă de excepție pentru a rezolva problemele care pot apărea în interogările noastre de baze de date (database queries). Dacă o excepție este făcută în block-ul try{}, scriptul nu mai este executat și este trimis direct către primul block catch(){}. În block-ul catch de mai sus afișam în echo instrucțiunea SQL și mesajul de eroare generat.

PHP MySQL Creare Tabel

PHP MySQL Create Table
Un tabel de baze de date (database table) are propriul nume unic și este format din coloane și rânduri (columns and rows).
Creați un tabel MySQL folosind MySQLi și PDO
Instrucțiunea CREATE TABLE este utilizată pentru a crea un tabel în MySQL.
Vom crea un tabel numit „MyGuests”, cu cinci coloane: "id", "firstname", "lastname", "email" și "reg_date":
CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
Tipul de date (data type) specifică ce tip de date poate conține coloana.
După tipul de date (data type), puteți specifica alte atribute opționale pentru fiecare coloană:
NOT NULL - Fiecare rând (row) trebuie să conțină o valoare pentru acea coloană (column), valorile nule nu sunt permise
Valoarea DEFAULT - Setați o valoare implicită care este adăugată atunci când nu este trecută altă valoare
UNSIGNED - Folosit pentru tipuri de numere, limitează datele stocate la numere pozitive și zero
AUTO INCREMENT - MySQL crește automat valoarea câmpului de fiecare dată când se adaugă o nouă înregistrare
PRIMARY KEY - Folosit pentru identificarea unică a rândurilor dintr-un tabel. Coloana cu setarea PRIMARY KEY este adesea un număr de identificare (ID number) și este adesea folosită cu AUTO_INCREMENT
Fiecare tabel trebuie să aibă o coloană de chei primare (primary key column) (în acest caz: coloana „id”). Valoarea sa trebuie să fie unică pentru fiecare înregistrare din tabel.
Următoarele exemple arată cum se creează tabelul în PHP:
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 pentru a crea tabelul
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
if ($conn->query($sql) === TRUE) {
    echo "Tabelul MyGuests creat cu succes";
} else {
    echo "Eroare la crearea tabelului: " . $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 pentru a crea tabelul
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
if (mysqli_query($conn, $sql)) {
    echo "Tabelul MyGuests creat cu succes";
} else {
    echo "Eroare la crearea tabelului: " . 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);

    // sql pentru a crea tabelul
    $sql = "CREATE TABLE MyGuests (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    firstname VARCHAR(30) NOT NULL,
    lastname VARCHAR(30) NOT NULL,
    email VARCHAR(50),
    reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    )";

    // utilizați exec() deoarece nu se returnează niciun rezultat
    $conn->exec($sql);
    echo "Tabelul MyGuests creat cu succes";
    }
catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }

$conn = null;
?>

PHP MySQL Obțineți ultimul ID introdus

PHP MySQL Obțineți ultimul ID introdus
Obțineți ID-ul ultimei înregistrări introduse
Dacă efectuăm un INSERT sau UPDATE pe o tabelă cu câmpul AUTO_INCREMENT, putem obține imediat ID-ul ultimei înregistrări introduse / actualizate (inserted/updated ).
În tabelul „MyGuests”, coloana „id” este un câmp AUTO_INCREMENT:
CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
Următoarele exemple sunt egale cu exemplele din pagina anterioară (PHP Insert Data In MySQL), cu excepția faptului că am adăugat o singură linie de cod pentru a prelua ID-ul ultimei înregistrări introduse. De asemenea, afisam cu echo ultimul ID introdus:
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]')";
if ($conn->query($sql) === TRUE) {
    $last_id = $conn->insert_id;
    echo "Noua înregistrare creată cu succes. Ultimul ID inserat este: " . $last_id;
} 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]')";
if (mysqli_query($conn, $sql)) {
    $last_id = mysqli_insert_id($conn);
    echo "Noua înregistrare creată cu succes. Ultimul ID inserat este: " . $last_id;
} 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);
    $sql = "INSERT INTO MyGuests (firstname, lastname, email)
    VALUES ('John', 'Doe', '[email protected]')";
    // utilizați exec() deoarece nu se returnează niciun rezultat
    $conn->exec($sql);
    $last_id = $conn->lastInsertId();
    echo "Noua înregistrare creată cu succes. Ultimul ID inserat este: " . $last_id;
    }
catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }
$conn = null;
?>

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 MySQL Limit Data

PHP MySQL Limitarea selecțiilor de date
Limitați selecțiile de date dintr-o bază de date MySQL
MySQL oferă o clauză LIMIT care este utilizată pentru a specifica numărul de înregistrări de returnat.
Clauza LIMIT facilitează codarea rezultatelor pe mai multe pagini sau paginarea cu SQL și este foarte utilă pe tabelele mari. Returnarea unui număr mare de înregistrări poate avea impact asupra performanței.
Presupunem că dorim să selectăm toate înregistrările de la 1 la 30 (inclusiv) dintr-un tabel numit „Comenzi” (Orders). Interogarea SQL ar arăta astfel:
$sql = "SELECT * FROM Orders LIMIT 30";
Când se execută interogarea SQL (SQL query) de mai sus, aceasta va returna primele 30 de înregistrări.
Ce se întâmplă dacă vrem să selectăm înregistrările 16 - 25 (inclusiv)?
Mysql oferă, de asemenea, o modalitate de a face acest lucru: folosind OFFSET.
Interogarea SQL (SQL query) de mai jos spune „returnează doar 10 înregistrări, începeți la înregistrarea 16 (OFFSET 15)”:
$sql = "SELECT * FROM Orders LIMIT 10 OFFSET 15";
Puteți utiliza, de asemenea, o sintaxă mai scurtă pentru a obține același rezultat:
$sql = "SELECT * FROM Orders LIMIT 15, 10";
Rețineți că numerele sunt inversate atunci când utilizați o virgulă.

PHP SimpleXML - Obțineți valorile nod/atribut

PHP SimpleXML - Obțineți valorile nod/atribut (Get Node/Attribute Values)
SimpleXML este o extensie PHP care ne permite să manipulăm cu ușurință și să obținem date XML.
PHP SimpleXML - Obțineți valorile nodului (Get Node Values)
Obțineți valorile nodului din fișierul „note.xml”:
<?php
$xml=simplexml_load_file("note.xml") or die("Eroare: Nu se poate crea obiectul");
echo $xml->to . "<br>";
echo $xml->from . "<br>";
echo $xml->heading . "<br>";
echo $xml->body;
?>
Rezultatul codului de mai sus va fi:
Ioana
Popescu
Reminder
Nu uita de mine în acest weekend!
Un alt fișier XML
Presupunem că avem un fișier XML numit "books.xml", care arată astfel:
<?xml version="1.0" encoding="utf-8"?>
<bookstore>
  <book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="CHILDREN">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="WEB">
    <title lang="en-us">XQuery Kick Start</title>
    <author>James McGovern</author>
    <year>2003</year>
    <price>49.99</price>
  </book>
  <book category="WEB">
    <title lang="en-us">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>
PHP SimpleXML - Obțineți valorile de nod ale unor elemente specifice (Get Node Values of Specific Elements)
Următorul exemplu obține valoarea nodului elementului <title> din primul și al doilea element <book> din fișierul "books.xml":
<?php
$xml=simplexml_load_file("books.xml") or die("Eroare: Nu se poate crea obiectul");
echo $xml->book[0]->title . "<br>";
echo $xml->book[1]->title;
?>
Rezultatul codului de mai sus va fi:
Everyday Italian
Harry Potter
PHP SimpleXML - Obțineți valorile nodului - Buclă (Get Node Values - Loop)
Următorul exemplu buclează (loops) toate elementele <book> din fișierul "books.xml" și primește valorile nodurilor ale elementelor <title>, <author>, <year> și <price>:
<?php
$xml=simplexml_load_file("books.xml") or die("Eroare: Nu se poate crea obiectul");
foreach($xml->children() as $books) {
    echo $books->title . ", ";
    echo $books->author . ", ";
    echo $books->year . ", ";
    echo $books->price . "<br>";
}
?>
Rezultatul codului de mai sus va fi:
Everyday Italian, Giada De Laurentiis, 2005, 30.00
Harry Potter, J K. Rowling, 2005, 29.99
XQuery Kick Start, James McGovern, 2003, 49.99
Learning XML, Erik T. Ray, 2003, 39.95
PHP SimpleXML - Obțineți valorile atributului (Get Attribute Values)
Următorul exemplu obține valoarea atributului ale atributului „category” al primului element <book> și valoarea atributului a atributului „lang” al elementului <title> din al doilea element <book>:
<?php
$xml=simplexml_load_file("books.xml") or die("Eroare: Nu se poate crea obiectul");
echo $xml->book[0]['category'] . "<br>";
echo $xml->book[1]->title['lang'];
?>
Rezultatul codului de mai sus va fi:
COOKING
en
PHP SimpleXML - Obțineți valorile atributului - Buclă (Get Attribute Values - Loop)
Următorul exemplu obține valorile atributelor elementelor <title> din fișierul "books.xml":
<?php
$xml=simplexml_load_file("books.xml") or die("Eroare: Nu se poate crea obiectul");
foreach($xml->children() as $books) {
    echo $books->title['lang'];
    echo "<br>";
}
?>
Rezultatul codului de mai sus va fi:
en
en
en-us
en-us

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 Bază de date AJAX

PHP - AJAX și MySQL
AJAX poate fi utilizat pentru comunicarea interactivă cu o bază de date.
Exemplu de bază de date AJAX
Modul în care o pagină web poate obține informații dintr-o bază de date cu AJAX:
Exemplu explicat
Când un utilizator selectează o persoană din lista derulantă, se execută o funcție numită „showUser()”.
Funcția este declanșată de evenimentul onchange.
<html>
<head>
<script>
function showUser(str) {
    if (str == "") {
        document.getElementById("txtHint").innerHTML = "";
        return;
    } else {
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("txtHint").innerHTML = this.responseText;
            }
        };
        xmlhttp.open("GET","getuser.php?q="+str,true);
        xmlhttp.send();
    }
}
</script>
</head>
<body>
<form>
<select name="users" onchange="showUser(this.value)">
  <option value="">Select a person:</option>
  <option value="1">Petre Georgescu</option>
  <option value="2">Luiza Georgescu</option>
  <option value="3">Ion Suciu</option>
  <option value="4">Georgiana Ionescu</option>
  </select>
</form>
<br>
<div id="txtHint"><b>Informațiile despre persoană vor fi enumerate aici ... </b></div>
</body>
</html>
Verificați dacă persoana este selectată. Dacă nu este selectată nicio persoană (str == ""), ștergeți conținutul txtHint și ieșiți din funcție. Dacă este selectată o persoană, 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 dezactivată unui fișier de pe server
Observați că la URL se adaugă un parametru (q) (avand conținutul listei derulante)
Fișierul PHP
Pagina de pe server numită de JavaScript-ul precedent este un fișier PHP numit "getuser.php".
Codul sursă din „getuser.php” rulează o interogare (query) împotriva unei baze de date MySQL și returnează rezultatul într-un tabel HTML:
<!DOCTYPE html>
<html>
<head>
<style>
table {
    width: 100%;
    border-collapse: collapse;
}
table, td, th {
    border: 1px solid black;
    padding: 5px;
}
th {text-align: left;}
</style>
</head>
<body>
<?php
$q = intval($_GET['q']);
$con = mysqli_connect('localhost','petre','abc123','my_db');
if (!$con) {
    die('Nu s-a putut conecta: ' . mysqli_error($con));
}
mysqli_select_db($con,"ajax_demo");
$sql="SELECT * FROM user WHERE id = '".$q."'";
$result = mysqli_query($con,$sql);
echo "<table>
<tr>
<th>Prenume</th>
<th>Nume</th>
<th>Vârsta</th>
<th>Orașul natal</th>
<th>Job</th>
</tr>";
while($row = mysqli_fetch_array($result)) {
    echo "<tr>";
    echo "<td>" . $row['Prenume'] . "</td>";
    echo "<td>" . $row['Nume'] . "</td>";
    echo "<td>" . $row['Vârsta'] . "</td>";
    echo "<td>" . $row['Orașul natal'] . "</td>";
    echo "<td>" . $row['Job'] . "</td>";
    echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>
</body>
</html>
Când interogarea este trimisă de la JavaScript în fișierul PHP, se întâmplă următoarele:
PHP deschide o conexiune la un server MySQL
Este găsită persoana corectă
Un tabel HTML este creat, umplut cu date și trimis înapoi la marcatorul de locație (placeholder) „txtHint”

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. 

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 3 sau grupa a III-a secundară

Grupa a III-a secundară a sistemului periodic, numerotată III B sau 3, cuprinde elementele rare scandiu, Sc, ytriu, Y, și lantan, La, precum și elementul radioactiv actiniu, Ac. 

 

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 9 sau grupa a VIII-a secundară

Grupa 9 a sistemului periodic, în trecut considerată parte a grupei a VIII-a secundare alături de grupele 8 și 10, cuprinde elementele cobalt, Co, rodiu, Rh, și iridiu, Ir. 

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