Va rugam dezactivati programul ad block pentru a vizualiza pagina!

Rezultate pentru tag: asemenea




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.

Imagini şi obiecte virtuale.

O discuţie detaliată asupra conceptelor de obiect virtual şi imagine virtuală: semnificaţie, proprietăţi.

Viteza şi acceleraţia.

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

Momentul forţei. Cuplul de forţe.

Efectul forţelor la rotaţia unui solid rigid. Momentul forţei şi cuplul de forţe. Convenţii de semn.

Ciclul Carnot.

Ciclul Carnot. Teorema Carnot: randament maxim. Motorul cu reacţie.

Tensiunea şi intensitatea.

Mecanismul de generare a curentului electric. Tensiunea electromotoare. Intensitatea curentului electric.

Rezistenţa. Legea Ohm.

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

Transformatorul. Alternatorul.

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

Oscilaţii electromagnetice.

Circuitul oscilant RLC. Oscilaţii electromagnetice libere, amortizate, forţate. Interpretarea energetică.

Transformările Galilei. Relativitatea clasică.

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

Modelul atomic Bohr I.

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

Interpretarea spectrelor hidrogenului.

Interpretarea legii seriilor spectrale ale atomului de hidrogen prin modelul Bohr. Calculul constantei Rydberg.

Aplicaţii: radiaţiile X.

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

Tabelul periodic – grupe şi perioade

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

Forţe intermoleculare. Legături de hidrogen.

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

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. 

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.

Adunarea și scăderea numerelor reale reprezentate prin litere

Operații cu numere reale reprezentate prin litere. Adunarea numerelor reale reprezentate prin litere. Scăderea numerelor reale reprezentate prin litere. 

Descompuneri în factori

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

Triunghiuri asemenea

Două triunghiuri se numesc triunghiuri asemenea dacă au toate laturile respectiv proporţionale şi toate unghiurile respectiv congruente

Teorema fundamentală a asemănării

O paralelă la una din laturile unui triunghi formează cu celelalte două laturi (sau cu prelungirile lor) un triunghi asemenea cu cel dat.

Teorema lui Pitagora

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

Secțiuni paralele cu baza în corpuri geometrice

Secțiune în corp geometric. Secțiuni paralele cu baza în prismă. Secțiuni paralele cu baza în corpuri rotunde. Secțiuni paralele cu baza în piramide.

Corpuri geometrice asemenea

Corpuri asemenea. Definiția a două piramide asemenea. Raport de asemănare. Raportul ariilor a două suprafețe omoloage. Raportul volumelor a două piramide asemenea. 

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. 

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.

Grăsimi

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

Derivaţi halogenaţi – importanţă, proprietăţi fizice

Aplicaţii practice ale derivaţilor halogenaţi. Clasificare. Nomenclatură. Caracteristicile legăturilor C – halogen. Proprietăţi fizice. Obţinere.

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. 

Proteine - structura secundară, terţiară şi cuaternară

Structura secundară - helix α, foi pliate β, structuri secundare nedefinite. Orientarea în spaţiu a proteinelor. Interacţiuni intramoleculare care stabilizează structura secundară. Structura terţiară. Interacţiuni care stabilizează structura terţiară a proteinelor. Protomeri. Structura cuaternară. Clasificarea proteinelor în funcţie de structură. Denaturarea proteinelor. 

Simetria față de o dreaptă

Simetricul unui punct față de un punct. Simetricul unui punct față de o dreaptă. Axa de simetrie. Simetrica unei figuri față de o axă 

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.

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. 

Influenţa catalizatorilor asupra vitezei de reacţie

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

Operaţii cu polinoame (1)

Adunarea polinoamelor scrise sub formă algebrică.

Operaţii cu polinoame (2)

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

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.

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.

Formatare text în HTML

Elementele de formatare au fost proiectate pentru a afișa tipuri speciale de text.
<b> definește textul bold, fără nici o importanță suplimentară.
<strong> definește un text intens, cu o importanță „puternică” semantică adăugată.
<i> definește textul italic, fără nicio importanță suplimentară.
<em> definește textul subliniat, cu o importanță semantică adăugată.
<small> definește textul mai mic.
<mark> definește textul marcat / evidențiat.
<del> definește textul șters / eliminat.
<ins> definește textul inserat / adăugat.
<sub> definește textul subscris.
<sup> definește textul suprascriptat.

Comentarii în codul HTML

Etichetele de comentarii sunt utilizate pentru a insera comentarii în codul sursă HTML.
Comentariile nu sunt afișate de browser, dar vă pot ajuta să vă documentați codul sursă HTML.Cu ajutorul comentariilor puteți plasa notificări și memento-uri în HTML.
Comentariile sunt de asemenea foarte bune pentru depanarea HTML, deoarece puteți comenta câteodată liniile de cod HTML pentru a căuta erori:

Culori în HTML

Culorile în codul HTML sunt specificate folosind nume de culori predefinite sau valorile: RGB, HEX, HSL, RGBA, HSLA.
În HTML, o culoare poate fi specificată folosind un nume de culoare.
Puteți seta culoarea de fundal (Background Color) pentru elementele HTML folosind background-color.
Puteți seta culoarea textului folosind color.
Puteți seta culoarea marginilor folosind border.
Saturația poate fi descrisă ca intensitatea unei culori.
Luminozitatea unei culori poate fi descrisă cam cât de multă lumină doriți să dați culorii.
Valorile de culoare RGBA sunt o extensie a valorilor de culoare RGB cu un canal alfa - care specifică opacitatea unei culori.
Valorile de culoare HSLA sunt o extensie a valorilor de culoare HSL cu un canal alfa - care specifică opacitatea unei culori.

Imagini de fundal în HTML

O imagine de fundal poate fi specificată pe aproape orice element HTML.
Pentru a adăuga o imagine de fundal în HTML, folosiți imaginea de fundal (background-image) a proprietății CSS.
Pentru a adăuga o imagine de fundal (background-image) la un element HTML, puteți utiliza atributul style.
Dacă doriți ca întreaga pagină să aibă o imagine de fundal (background-image), atunci trebuie să specificați imaginea de fundal (background-image) în elementul <body>.
Dacă imaginea de fundal este mai mică decât elementul, imaginea se va repeta, orizontal și vertical, până când va ajunge la sfârșitul elementului.
Pentru a evita ca imaginea de fundal (background-image)să se repete, utilizați proprietatea background-repeat.
Dacă doriți ca imaginea de fundal să acopere întregul element, puteți seta proprietatea de fundal (background-size) pe care să o acopere.
De asemenea, pentru a vă asigura că întregul element este întotdeauna acoperit, setați proprietatea de atașare în fundal la fix (background-attachment).
Dacă doriți ca întinderea imaginii de fundal să se potrivească întregii imagini din element, puteți seta proprietatea de fundal (background-size) la 100% 100%:

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

HTML Iframes

Un iframe este utilizat pentru a afișa o pagină web în cadrul unei pagini web.
Un iframe HTML este definit cu eticheta <iframe>.
Atributul src specifică adresa URL (adresa web) a paginii inline frame.
Utilizați atributele height și width (înălțime și lățime) pentru a specifica dimensiunea iframei.
Sau puteți utiliza CSS pentru a seta height și width (înălțimea și lățimea) iframe-ului.
În mod implicit, un iframe are un chenar (border) în jurul său.
Pentru a elimina chenarul (border), adăugați atributul style și utilizați proprietatea CSS border.
Cu CSS, puteți modifica, de asemenea, dimensiunea, stilul și culoarea marginii iframe.
Un iframe poate fi folosit ca target frame pentru o legătură.
Atributul target al linkului trebuie să se refere la atributul name al iframe:
<iframe> Definește un cadru inline.

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.



 

Entități HTML

Caracterele rezervate în HTML trebuie înlocuite cu entități de caractere.
Caracterele care nu sunt prezente pe tastatură pot fi, de asemenea, înlocuite de entități.

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

Formulare HTML

Elementul HTML <form> definește un formular care este utilizat pentru a colecta intrarea utilizatorului.
Elementele de formular sunt diferite tipuri de elemente de intrare, cum ar fi câmpurile de text, casetele de selectare, butoanele radio, butoanele de trimitere și multe altele.
Elementul <input> este cel mai important form element.
Elementul <input> poate fi afișat în mai multe moduri, în funcție de atributul type.
<input type = "text"> Definește un câmp de introducere text dintr-o linie.
<input type = "radio"> Definește un buton radio (pentru selectarea uneia dintre mai multe opțiuni).
<input type = "submit"> Definește un buton de trimitere (pentru trimiterea formularului).
Form-handler este de obicei o pagină de server cu un script pentru procesarea datelor de intrare.
Form-handler este specificat în atributul de acțiune al formularului.
Atributul action definește acțiunea care trebuie executată la trimiterea formularului.
Atributul target specifică dacă rezultatul trimis se va deschide într-o nouă pagină a browser-ului, într-un cadru sau în fereastra curentă.
Valoarea implicită este „_self”, ceea ce înseamnă că formularul va fi transmis în fereastra curentă.
Pentru a face ca rezultatul formularului să fie deschis într-o nouă pagină a browser-ului, folosiți valoarea „_blank”.
Atributul method specifică metoda HTTP (GET sau POST) care trebuie utilizată la trimiterea datelor formularului.
Trimiterea datelor formularului se face cu metoda implicită GET.
Utilizați întotdeauna POST dacă datele din formular conțin informații personale sau sensibile. Metoda POST nu afișează datele formularului trimis în câmpul adresei paginii.
Elementul <fieldset> este utilizat pentru a grupa datele înrudite într-un formular.
Elementul <legend> definește o legendă pentru elementul <fieldset>.

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.

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

Suport HTML5

HTML5 este acceptat în toate browserele moderne.
În plus, toate browserele, vechi și noi, gestionează automat elemente nerecunoscute ca elemente inline.
Din această cauză, puteți „învăța” browserele mai vechi să gestioneze elemente HTML „necunoscute”.
Puteți învăța browserele mai vechi să gestioneze corect HTML5.
HTML5 definește opt noi elemente semantice. Toate acestea sunt elemente la nivel de bloc (block-level elements).
Pentru a asigura un comportament corect în browserele mai vechi, puteți seta proprietatea de afișare CSS (CSS display property) pentru aceste elemente HTML pentru a le bloca.
Puteți adăuga, de asemenea, unei pagini HTML, elemente noi folosind un truc de browser.
Declarația JavaScript document.createElement ("myHero") este necesară pentru a crea un element nou în IE 9 și în versiunile anterioare.
Veți avea nevoie de HTML5Shiv pentru a oferi compatibilitate pentru browsere IE mai vechi decât IE 9.
HTML5Shiv este plasat în eticheta <head>.
HTML5Shiv este un fișier javascript la care se face referire într-o etichetă <script>.
Ar trebui să utilizați HTML5Shiv când utilizați noile elemente HTML5 precum: <article>, <section>, <aside>, <nav>, <footer>.

Elemente semantice în HTML5

Semantica se referă la studiul sensurilor cuvintelor și frazelor dintr-o limbă.
Elemente semantice = elemente cu semnificație:
<article>, <aside>, <details>, <figcaption>, <figure>, <footer>, <header>, <main>, <mark>, <nav>, <section>, <summary>, <time>.
Exemple de elemente non-semantice<div> și <span> - Nu spune nimic despre conținutul său.
Exemple de elemente semantice<form><tabel> și <article> - definește clar conținutul său.
<article> Definește un articol
<aside> Definește conținutul în afară de conținutul paginii
<detalii> Definește detalii suplimentare pe care utilizatorul le poate vizualiza sau ascunde
<figcaption> Definește o legendă pentru un element <figure>
<figure> Specifică conținut independent, cum ar fi ilustrații, diagrame, fotografii, listări de coduri etc.
<footer> Definește un subsol pentru un document sau secțiune
<header> Specifică un antet pentru un document sau secțiune
<main> Specifică conținutul principal al unui document
<mark> Definește text marcat / evidențiat
<nav> Definește legăturile de navigare
<section> Definește o secțiune dintr-un document
<summary> Definește un titlu vizibil pentru un element <details>
<time> Definește o data / ora

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

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 Plug-ins

Scopul unui plug-in este extinderea funcționalității unui browser web.
Aplicațiile Helper (plug-in-uri) sunt programe de calculator care extind funcționalitatea standard a unui browser web.
Exemple de plug-in-uri cunoscute sunt applet-urile Java.
Plug-in-urile pot fi adăugate la paginile web cu eticheta <object> sau cu eticheta<embed>.
Plug-in-urile pot fi utilizate în mai multe scopuri: afișarea hărților, scanarea virușilor, verificarea codului dvs. bancar etc.
Pentru a afișa videoclipuri și audio: utilizați etichetele <video> și <audio>.
Elementul <object> este acceptat de toate browserele.
Elementul <object> definește un obiect încorporat într-un document HTML.
Este utilizat pentru a încorpora plug-in-uri (cum ar fi applet-uri Java, cititoare PDF, Flash Players) în paginile web.
Elementul <object> poate fi de asemenea utilizat pentru a include HTML în HTML sau imagini.
Elementul <embed> este acceptat în toate browserele principale.
Elementul <embed> definește, de asemenea, un obiect încorporat într-un document HTML.
Navigatoarele web au acceptat elementul <embed> de mai mult timp. Cu toate acestea, nu a făcut parte din specificația HTML înainte de HTML5.
Elementul <embed> nu are o etichetă de închidere. Nu poate conține text alternativ.
Elementul <embed> poate fi folosit și pentru a include HTML în HTML sau imagini.

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

CSS Sintaxă

Un set de reguli CSS constă dintr-un selector și un bloc de declarații.
Selectorul indică elementul HTML pe care doriți să-l creeze în stil.
Blocul de declarație conține una sau mai multe declarații separate prin punct și virgulă.
Fiecare declarație include un nume de proprietate CSS și o valoare, separate de două puncte.
O declarație CSS se încheie întotdeauna cu punct și virgulă, iar blocurile de declarație sunt înconjurate de acolade.
Comentariile sunt utilizate pentru a explica codul și pot fi utile atunci când editați codul sursă la o dată ulterioară.
Comentariile sunt ignorate de browsere.
Un comentariu CSS începe cu / * și se termină cu * /. De asemenea, comentariile pot cuprinde mai multe linii.

CSS Selectori

Selectoarele CSS sunt utilizate pentru a „găsi” (sau a selecta) elementele HTML pe care doriți să le modelați.
Putem împărți selectorii CSS în cinci categorii:
Selectoare simple (selectează elemente bazate pe nume, id, clasă)
Selectoare combinate (elemente selectate bazate pe o relație specifică între ele)
Selectori de clasă pseudo (elemente selectate bazate pe o anumită stare)
Selectoare pseudo-elemente (selectează și stilează o parte dintr-un element)
Selectori de atribute (elemente selectate bazate pe un atribut sau o valoare de atribut)
Această pagină va explica cei mai de bază selectori CSS.
Selectorul de elemente selectează elemente HTML pe baza numelui elementului.
Selectorul id utilizează atributul id al unui element HTML pentru a selecta un anumit element.
ID-ul unui element este unic într-o pagină, astfel încât selectorul de id este utilizat pentru a selecta un element unic!
Pentru a selecta un element cu un anumit id, scrieți un caracter hash (#), urmat de id-ul elementului.
Selectorul CSS class
Selectorul de clase (class) selectează elemente HTML cu un atribut de clasă specific.
Pentru a selecta elemente cu o anumită clasă, scrieți un caracter (.), urmat de numele clasei.
Puteți specifica, de asemenea, că numai anumite elemente HTML ar trebui să fie afectate de o clasă.
Elementele HTML se pot referi, de asemenea, la mai multe clase.
Elementul <p> va fi stilat în funcție de class = "center" și de class = "large".
Numai elementele <p> cu class = "center" vor fi aliniate la centru (center-aligned).
Un nume de clasă nu poate începe cu un număr!
Selectorul universal CSS
Selectorul universal (*) selectează toate elementele HTML din pagină.
Selectorul de grupare CSS
Selectorul de grupare selectează toate elementele HTML cu aceleași definiții de stil.
.class .intro - Selectează toate elementele cu class = "intro".
#id #firstname - Selectează elementul cu id = "firstname".
*  -  Selectează toate elementele.
element p -  Selectează toate elementele <p>.
element, element, .. div, p - Selectează toate elementele <div> și toate elementele <p>.

Cum să adăugați CSS

Când un browser citește o foaie de stil, acesta va format documentul HTML în conformitate cu informațiile din foaia de stil.
Trei modalități de a insera CSS.
Există trei moduri de inserare a unei foi de stil:
CSS extern
CSS intern
CSS inline
CSS extern
Cu o foaie de stil extern, puteți schimba aspectul unui întreg site web schimbând doar un singur fișier!
Fiecare pagină HTML trebuie să includă o trimitere la fișierul de stil extern din interiorul elementului <link>, în secțiunea head.
Stilurile externe sunt definite în elementul <link>, în secțiunea <head> a unei pagini HTML.
O foaie de stil extern poate fi scrisă în orice editor de text și trebuie salvată cu o extensie .css.
Fișierul .css extern nu trebuie să conțină nicio etichetă HTML.
Nu adăugați un spațiu între valoarea proprietății și unitate (cum ar fi margin-left: 20 px;). Modul corect este: margin-left: 20px;
CSS intern
Poate fi utilizată o foaie de stil internă (internal style sheet) dacă o singură pagină HTML are un stil unic.
Stilul intern este definit în elementul <style>, în interiorul secțiunii head.
CSS inline
Se poate folosi un stil inline pentru a aplica un stil unic pentru un singur element.
Pentru a utiliza stiluri în linie, adăugați atributul stylela elementul relevant. Atributul de stil poate conține orice proprietate CSS.
Stilurile în linie sunt definite în atributul „style ” al elementului relevant.
Fișe de stil multiple (Multiple Style Sheets)
Dacă unele proprietăți au fost definite pentru același selector (element) în foi de stil diferite, se va utiliza valoarea din ultima foaie de stil citită.
Comandă în cascadă
Toate stilurile dintr-o pagină se vor „încadra” într-o nouă foaie de stil „virtuală” după următoarele reguli, unde numărul unu are cea mai mare prioritate:
Stil în linie (în interiorul unui element HTML).
Fișe de stil externe și interne (în secțiunea cap).
Setare implicită a browserului.
Deci, un stil inline are cea mai mare prioritate și va înlocui stilurile externe și interne și valorile implicite ale browserului.

Culori CSS

Culorile sunt specificate folosind nume de culori predefinite sau valori RGB, HEX, HSL, RGBA, HSLA.
Nume de culoare CSS.
În CSS, o culoare poate fi specificată folosind un nume de culoare.
CSS / HTML acceptă 140 de nume standard de culori.
Culoare de fundal CSS (CSS Background Color).
Puteți seta culoarea de fundal pentru elementele HTML.
Culoare text CSS (CSS Text Color).
Puteți seta culoarea textului.
Culoarea marginilor în CSS (CSS Border Color).
Puteți seta culoarea marginilor.
Valori de culoare CSS (CSS Color Values).
În CSS, culorile pot fi de asemenea specificate folosind valori RGB, valori HEX, valori HSL, valori RGBA și valori HSLA.
Valoarea CSS RGB
În CSS, o culoare poate fi specificată ca valoare RGB, folosind această formulă:
rgb (roșu, verde, albastru) / rgb(red, green, blue)
Fiecare parametru (roșu, verde și albastru)/rgb(red, green, blue) definește intensitatea culorii între 0 și 255.
De exemplu, rgb (255, 0, 0) este afișat ca roșu, deoarece roșul este setat la valoarea cea mai mare (255), iar celelalte sunt setate pe 0.
Pentru a afișa culoarea neagră, toți parametrii de culoare trebuie să fie setați la 0, astfel: rgb (0, 0, 0).
Pentru a afișa culoarea albă, toți parametrii de culoare trebuie să fie setați la 255, astfel: rgb (255, 255, 255).
Valoarea CSS HEX
În CSS, o culoare poate fi specificată folosind o valoare hexadecimală sub forma:
#rrggbb
În cazul în care rr (roșu), gg (verde) și bb (albastru) sunt valori hexadecimale între 00 și ff (la fel ca zecimale 0-255).
De exemplu, # ff0000 este afișat ca roșu, deoarece roșul este setat la cea mai mare valoare (ff), iar celelalte sunt setate la cea mai mică valoare (00).
Valoare HSL.
În CSS, o culoare poate fi specificată folosind nuanță, saturație și ușurință (HSL) sub forma:
hsl (nuanță, saturație, ușurință)/ hsl (hue, saturation, lightness).
Hue este un grad pe roata de culoare de la 0 la 360. 0 este roșu, 120 este verde și 240 albastru.
Saturația este o valoare procentuală, 0% înseamnă o nuanță de gri, iar 100% este culoarea completă.
De asemenea, lumina este procentuală, 0% este negru, 50% nu este nici lumină, nici întunecată, 100% alb.
Saturația (saturation).
Saturația poate fi descrisă ca intensitatea unei culori.
100% este de culoare pură, fără nuanțe de gri
50% este 50% gri, dar puteți vedea în continuare culoarea.
0% este complet gri, nu mai puteți vedea culoarea.
Luminozitate (Lightness).
Luminozitatea unei culori poate fi descrisă cât de multă lumină doriți să dați culorii, unde 0% nu înseamnă lumină (negru), 50% înseamnă 50% lumină (nici întuneric, nici lumină) 100% înseamnă lumină completă (alb).
Nuanțele de gri sunt adesea definite prin setarea nuanței și a saturației la 0 și reglați luminozitatea de la 0% la 100% pentru a obține nuanțe mai închise / mai deschise.
Valoarea RGBA.
Valorile de culoare RGBA sunt o extensie a valorilor de culoare RGB cu un canal alfa - care specifică opacitatea unei culori.
O valoare de culoare RGBA este specificată cu:
rgba (roșu, verde, albastru, alfa) / rgba(red, green, blue, alpha)
Parametrul alfa este un număr între 0.0 (complet transparent) și 1.0 (deloc transparent).
Valoarea HSLA.
Valorile de culoare HSLA sunt o extensie a valorilor de culoare HSL cu un canal alfa - care specifică opacitatea unei culori.
O valoare de culoare HSLA este specificată cu:
hsla (nuanță, saturație, luminozitate, alfa) / hsla (hue, saturation, lightness, alpha)
Parametrul alfa este un număr între 0.0 (complet transparent) și 1.0 (deloc transparent).

CSS Fundaluri

Proprietățile de fundal CSS sunt utilizate pentru a defini efectele de fundal pentru elemente.
Proprietăți de fundal CSS: culoare de fundal, imagine de fundal, fundal repetare, background-attachment, background-position.
Culoare de fundal CSS ( CSS background-color).
Proprietatea de culoare de fundal specifică culoarea de fundal a unui element.
Cu CSS, o culoare este cel mai des specificată de: un nume de culoare valid - precum „roșu”, o valoare HEX - ca „# ff0000”, o valoare RGB - ca „rgb (255,0,0)”.
Imagine de fundal CSS (CSS background-image)
Proprietatea de fundal imagine specifică o imagine pe care să o folosească ca fundal al unui element.
În mod implicit, imaginea este repetată, astfel încât acoperă întregul element.
Când utilizați o imagine de fundal, utilizați o imagine care nu perturba textul.
Repetare de fundal CSS (CSS background-repeat)
În mod implicit, proprietatea imaginii de fundal repetă o imagine atât pe orizontală cât și pe verticală.
Unele imagini trebuie repetate doar pe orizontală sau vertical sau vor arăta ciudat, astfel:
Pentru a repeta o imagine pe verticală, setați background-repeat: repeat-y;
Fundal CSS-repetare: nu se repetă (CSS background-repeat: no-repeat)
Afișarea imaginii de fundal o singură dată este, de asemenea, specificată de proprietatea background-repeat.
În exemplul de mai sus, imaginea de fundal este plasată în același loc cu textul. Vrem să schimbăm poziția imaginii, astfel încât să nu deranjeze prea mult textul.
Poziția de fundal CSS (CSS background-position).
Proprietatea poziție fundal este utilizată pentru a specifica poziția imaginii de fundal.
Atasament de fundal CSS (CSS background-attachment).
Proprietatea de atașare de fundal specifică dacă imaginea de fundal trebuie să se deruleze sau să fie fixată (nu va defila cu restul paginii).
Fundal CSS - proprietatea shorthand
Pentru a scurta codul, este de asemenea posibil să specificați toate proprietățile de fundal într-o singură proprietate. Aceasta se numește o proprietate shorthand.
Proprietatea shorthand pentru fundal este fundal.
Când folosiți proprietatea shorthand ordinea valorilor proprietății este:
background-color
background-image
background-repeat
background-attachment
background-position
Nu contează dacă lipsește una din valorile proprietății, atât timp cât celelalte sunt în această ordine.
background - Setează toate proprietățile fundalului într-o singură declarație
background-attachment - Setează dacă o imagine de fundal este fixă sau defilează cu restul paginii
background-clip - Specifică zona de pictură a fundalului
background-color - Setează culoarea de fundal a unui element
background-image - Setează imaginea de fundal pentru un element
background-origin - Specifică unde este / sunt poziționate imaginile de fundal
background-position - Setează poziția de pornire a unei imagini de fundal
background-repeat - Setează modul în care se va repeta o imagine de fundal
background-size - Specifică dimensiunea imaginii de fundal

CSS Borders

Proprietăți CSS Borders.
Proprietățiile CSS Borders vă permit să specificați stilul, lățimea și culoarea chenarului unui element.
CSS Border Style.
Proprietatea CSS Border Style specifică ce fel de chenar trebuie afișat.
Sunt permise următoarele valori:
dotted (punctat) - Definește un chenar (border) punctat.
dashed - Definește o bordură (border) punctată.
solid - Definește o bordură (border) solidă.
double (dublu) - Definește o bordură (border) dublă.
groove - Definește un chenar cu caneluri 3D. Efectul depinde de valoarea culorii bordurii (border-color).
ridge - Definește un chenar (border) ridicat 3D. Efectul depinde de valoarea culorii bordurii (border-color).
inset - Definește un chenar (border) de inserție 3D. Efectul depinde de valoarea culorii bordurii (border-color).
outset - Definește un chenar (border) de declanșare 3D. Efectul depinde de valoarea culorii bordurii (border-color).
none - Nu definește nici o frontieră (border).
hidden (ascuns) - definește un chenar (border) ascuns.
Proprietatea border-style poate avea de la una până la patru valori (pentru top border, right border, bottom border, left border).
Niciuna dintre celelalte proprietăți CSS border descrise mai jos nu va avea NICIUN efect, decât dacă este setată proprietatea border-style!
Lățimea marginilor CSS (CSS Border Width)
Proprietatea border-width specifică lățimea celor patru chenare.
Lățimea poate fi setată ca o dimensiune specifică (în px, pt, cm, em, etc.) sau folosind una dintre cele trei valori predefinite: subțire, medie sau groasă (thin, medium, thick.).
Proprietatea border-width poate avea de la una până la patru valori (pentru marginea superioară, granița dreaptă, limita de jos și marginea din stânga/ top border, right border, bottom border, left border).
CSS Border Color
Proprietatea border-color este utilizată pentru a seta culoarea celor patru chenare.
Culoarea poate fi setată de:
name - Specificați un nume de culoare, cum ar fi „red”.
Hex - Specificați o valoare hexagonală, cum ar fi „# ff0000”.
RGB - Specificați o valoare RGB, cum ar fi „rgb (255,0,0)”.
transparent.
Proprietatea border-color poate avea de la una până la patru valori (pentru marginea de sus, marginea dreaptă, limita de jos și marginea din stânga/top border, right border, bottom border, left border).Dacă border-color nu este setată, moștenește culoarea elementului.
CSS Border - Individual Sides
Din exemplele de mai sus, ați văzut că este posibil să specificați o frontieră diferită pentru fiecare parte.
În CSS, există, de asemenea, proprietăți pentru specificarea fiecărui chenar (sus, dreapta, jos și stânga/top, right, bottom, left).
Dacă proprietatea border-style are patru valori:
border-style: punctat dublu punctat solid.
top border este punctat.
right border este solid.
bottom border este dublu.
left border este punctat.
Dacă proprietatea border-style are trei valori:border-style: dublu solid punctat.
top border este punctat.
right și left borders sunt solide.
bottom border este dublu.
Dacă proprietatea border-style are două valori:
border-style: solid punctat.
top și bottom borders sunt punctate.
right și left borders sunt solide.
Dacă proprietatea border-style are o valoare:
border-style: punctat.
toate cele patru granițe sunt punctate.
Proprietatea border-style este folosită în exemplul de mai sus. Cu toate acestea, funcționează, de asemenea, cu border-width și border-color.
CSS Border - Proprietatea Shorthand
După cum puteți vedea din exemplele de mai sus, există multe proprietăți de luat în considerare atunci când aveți de-a face cu frontierele.
Pentru a scurta codul, este de asemenea posibil să se specifice toate proprietățile de frontieră individuale într-o singură proprietate.
Proprietatea de frontieră (border) este o proprietate shorthand pentru următoarele proprietăți individuale de frontieră:
border-width
border-style (required)
border-color
Frontierele rotunjite CSS (CSS Rounded Borders).
Proprietatea border-radius este utilizată pentru a adăuga borduri rotunjite la un element.
Toate proprietățile top border într-o singură declarație.
Acest exemplu demonstrează o proprietate shorthand pentru setarea tuturor proprietăților pentru top border într-o singură declarație.
Setați stilul marginii de jos (bottom border).
Acest exemplu demonstrează cum să setați stilul marginii de jos (bottom border).
Setați lățimea marginii din stânga (left border).
Acest exemplu demonstrează modul de setare a lățimii marginii din stânga (left border).
Setați culoarea celor patru chenare (borders).
Acest exemplu demonstrează cum să setați culoarea celor patru chenare. Poate avea de la una la patru culori.
Setați culoarea marginii drepte (right border).
Acest exemplu demonstrează cum să setați culoarea marginii drepte (right border).
border Setează toate proprietățile de frontieră într-o singură declarație
border-bottom Setează toate proprietățile frontierei de jos într-o singură declarație
border-bottom-color Setează culoarea marginii de jos
border-bottom-style Setează stilul marginii de jos
border-bottom-width Setează lățimea marginii de jos
border-color Setează culoarea celor patru chenare
border-left Stabilește toate proprietățile frontierei din stânga într-o singură declarație
border-left-color Setează culoarea marginii din stânga
border-left-style Setează stilul chenarului din stânga
border-left-width Setează lățimea marginii din stânga
border-radius Setează toate cele patru chenare - * - proprietăți ale razei pentru colțurile rotunjite
border-right Setează toate proprietățile de frontieră dreaptă într-o singură declarație
border-right-color Setează culoarea marginii drepte
border-right-style Setează stilul chenarului drept
border-right-width Setează lățimea marginii drepte
border-style Setează stilul celor patru chenare
border-top Setează toate proprietățile de frontieră de sus într-o singură declarație
border-top-color Setează culoarea marginii superioare
border-top-style Setează stilul chenarului superior
border-top-width Setează lățimea marginii superioare
border-width Setează lățimea celor patru chenare

CSS Outline

Un outline este o linie care este desenată în jurul elementelor, în afara granițelor (borders), pentru a face ca elementul să „iasă în evidență”.
CSS are următoarele proprietăți outline (contur): outline-style, outline-color, outline-width, outline-offset, outline.
Conturul (outline) diferă de granițe (borders)! Spre deosebire de graniță (border), conturul (outline) este tras în afara graniței elementului și poate suprapune alt conținut. De asemenea, conturul (outline) NU este o parte din dimensiunile elementului; lățimea și înălțimea (height și weight) totală a elementului nu este afectată de lățimea conturului.
CSS Outline Style.
Proprietatea outlyne style specifică stilul conturului și poate avea una dintre următoarele valori:
dotted (punctat) - Definește un contur punctat.
dashed (marcat) - Definește un contur discret.
solid - Definește un contur solid.
double (dublu) - Definește un contur dublu.
groove (canelură) - Definește un contur în canelură 3D.
ridge - Definește un contur 3D ridged.
inset - Definește un contur de inserție 3D.
outset - Definește un contur de declanșare 3D.
none - Nu definește contur.
hidden (ascuns) - Definește un contur ascuns.
Niciuna dintre celelalte proprietăți outline nu va avea niciun efect, cu excepția cazului în care proprietatea în stil outline este setată!
CSS Outline Color.
Proprietatea CSS outline-color este utilizată pentru a seta culoarea conturului.
Culoarea poate fi setată de:
name - Specificați un nume de culoare, cum ar fi „red”.
RGB - Specificați o valoare RGB, cum ar fi „rgb (255,0,0)”.
Hex - Specificați o valoare hexagonală, cum ar fi „# ff0000”.
invert - Realizează o inversare a culorii (care asigură că conturul este vizibil, indiferent de fundalul culorii).
CSS Outline Width.
Proprietatea outline-width specifică lățimea conturului și poate avea una dintre următoarele valori:
thin (subțire) - de obicei 1px.
medium (mediu) - de obicei 3px.
thick (gros) - de obicei 5px.
O dimensiune specifică (în px, pt, cm, em, etc).
CSS Outline - Proprietatea Shorthand
Proprietatea outline este o proprietate shorthand pentru setarea următoarelor proprietăți outline individuale: outline-width, outline-style (required), outline-color.
CSS Outline Offset
Proprietatea outline-offset adaugă spațiu între un outline și edge/ border unui element. Spațiul dintre un element și conturul său este transparent.
Proprietățiile CSS Outline: outline, outline-color, outline-offset, outline-style, outline-width.
outline - O proprietate shorthand pentru setarea contur-lățime, stil contur și contur-culoare într-o singură declarație.
outline-color - Setează culoarea unui contur.
outline-offset - Specifică spațiul dintre un contur și marginea sau marginea unui element.
outline-style - Setează stilul unui contur.
outline-width - Setează lățimea unui contur.

CSS Liste

În HTML, există două tipuri principale de liste:
liste neordonate (<ul>) - articolele din listă sunt marcate cu buline.
liste ordonate (<ol>) - elementele din listă sunt marcate cu numere sau litere.
Proprietățiile listei CSS vă permit să:
Setați markeri de articole de listă diferite pentru liste ordonate.
Setați markeri de articole de listă diferite pentru liste neordonate.
Setați o imagine ca marker a elementelor din listă.
Adăugați culori de fundal la liste și elemente de listă.
Different List Item Markers
Proprietatea list-style-type specifică tipul markerului de element de listă.
O imagine ca marker element de listă
Proprietatea list-style-image specifică o imagine ca marker al elementului de listă.
Poziționează marcatorii de elemente de listă (Position The List Item Markers)
Proprietatea list-style-position specifică poziția marcatorilor de elemente de listă (puncte glonț).
"list-style-position: outside;" - înseamnă că punctele glonț se vor afla în afara articolului din listă. Începutul fiecărei linii a unui element de listă va fi aliniat vertical. Aceasta este implicită.
"list-style-position: inside;" - înseamnă că punctele glonț vor fi în interiorul articolului din listă. Deoarece face parte din elementul listei, acesta va face parte din text și va împinge textul la început.
Eliminați setările implicite
Proprietatea list-style-type:none poate fi utilizată pentru a elimina markerele / gloanțele. Rețineți că lista are, de asemenea, margin și padding implicite. Pentru a elimina acest lucru, adăugați margin: 0 și padding: 0 până la <ul> sau <ol>.
Listă - Proprietatea Shorthand
Proprietatea list-style este o proprietate de tip shorthand. Este utilizat pentru a seta toate proprietățile listei într-o singură declarație.
Când utilizați proprietatea shorthand, ordinea valorilor proprietății este:
list-style-type - (dacă este specificată o imagine-list-style-image, valoarea acestei proprietăți va fi afișată dacă imaginea din anumite motive nu poate fi afișată)
list-style-position - (specifică dacă markerii elementelor de listă trebuie să apară în interiorul sau în afara fluxului de conținut)
list-style-image (specifică o imagine ca marker pentru elementele de listă)
Dacă una din valorile proprietății de mai sus lipsește, valoarea implicită pentru proprietatea lipsă va fi introdusă, dacă există.
Styling List With Colors.
Putem, de asemenea, stiliza listele cu culori, pentru a le face să pară ceva mai interesante.
Orice lucru adăugat la eticheta <ol> sau <ul>, afectează întreaga listă, în timp ce proprietățile adăugate la eticheta <li> vor afecta elementele listei individuale.
list-style Setează toate proprietățile pentru o listă într-o singură declarație.
list-style-image Specifică o imagine ca marker de listă.
list-style-position Specifică poziția markerilor elementelor din listă (puncte glont).
list-style-type Specifică tipul markerului de listă.

CSS Display

Layout CSS - Proprietatea display
Proprietatea display este cea mai importantă proprietate CSS pentru controlul aspectului.
Proprietatea display
Proprietatea display specifică dacă / cum este afișat un element.
Fiecare element HTML are o valoare de afișare implicită în funcție de tipul de element. Valoarea implicită a afișajului pentru majoritatea elementelor este block sau inline.
Elemente la nivel de block (Block-level Elements)
Un element la nivel de block (block-level element) pornește întotdeauna pe o nouă linie și ocupă toată lățimea disponibilă (se întinde spre stânga și spre dreapta, cât poate).
Exemple de elemente la nivel de block (block-level element): <div>, <h1> - <h6>, <p>, <form>, <header>, <footer>, <section>.
Elemente în linie (Inline Elements)Un element inline nu pornește de pe o nouă linie și ocupă doar lățimea necesară.
Acesta este un element <span> inline din interiorul unui paragraf.
Exemple de elemente inlinie: <span>, <a>, <img>.
Display: none;
Display: none; este utilizat în mod obișnuit cu JavaScript pentru a ascunde și a arăta elementele fără a le șterge și recrea.
Elementul <script> folosește display: none; ca implicit.
Înlocuire Valoare implicită a afișajului
După cum am menționat, fiecare element are o valoare de afișare implicită. Cu toate acestea, puteți trece peste acest lucru.
Modificarea unui element inline într-un element de block, sau invers, poate fi utilă pentru ca pagina să arate într-un mod specific și să respecte în continuare standardele web.
Un exemplu obișnuit este crearea de elemente inline <li> pentru meniurile orizontale.
Setarea proprietății de afișare (display) a unui element modifică doar modul în care este afișat elementul, NU ce fel de element este. Deci, un element inline cu display: block; nu este permis să aibă alte elemente de block în interiorul său.
crearea de elemente inline <li> pentru meniurile orizontale.
afișare elemente <span> ca elemente de block.
afișare elemente <a> ca elemente de block.
Ascunde un element - display:none sau visibility:hidden?
Ascunderea unui element se poate face prin setarea proprietății dispaly la none. Elementul va fi ascuns, iar pagina va fi afișată ca și cum elementul nu este acolo.
visibility:hidden; ascunde de asemenea un element.
Cu toate acestea, elementul va ocupa totuși același spațiu ca înainte. Elementul va fi ascuns, dar afectează în continuare aspectul.
Proprietăți CSS de afișare / vizibilitate:
display - Specifică modul în care trebuie afișat un element.
visibility - Specifică dacă un element trebuie să fie vizibil sau nu.

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 Float

Proprietatea CSS float  specifică modul în care un element ar trebui să plutească (float).
Proprietatea CSS clear specifică ce elemente pot pluti  (float) lângă elementul șters și pe ce parte.
Proprietatea float
Proprietatea float este utilizată pentru poziționarea și formatarea conținutului, de ex. lăsați o imagine să plutească stânga spre text într-un container.
Proprietatea float poate avea una dintre următoarele valori:
left (stânga) - Elementul plutește în stânga containerului său.
right (dreapta) - Elementul plutește în dreapta containerului său.
none - Elementul nu plutește (va fi afișat acolo unde apare în text). Aceasta este implicită.
inherit (mostenire) - elementul moștenește valoarea float a părintelui său.
În cea mai simplă utilizare, proprietatea float poate fi utilizată pentru a înfășura text în jurul imaginilor.
Elementul float: right; (float: dreapta;).
Elementul float: left; (float: stânga;).
Elementul float: none;. 
Proprietatea clear
Proprietatea clear specifică ce elemente pot pluti (float) lângă elementul șters și pe ce parte.
Proprietatea clear poate avea una dintre următoarele valori:
none - Permite elemente plutitoare de ambele părți. Aceasta este implicită.
left (stânga) - Nu sunt permise elemente plutitoare în partea stângă.
right (dreapta) - Nu sunt permise elemente plutitoare în partea dreaptă.
both (ambele) - Nu sunt permise elemente plutitoare nici pe partea stângă, fie pe partea dreaptă.
inherit (mostenirea) - Elementul mosteneste valoarea clara a parintelui său.
Cel mai obișnuit mod de a utiliza proprietatea clear este după ce ați utilizat o proprietate float pe un element.
Când ștergeți floats, ar trebui să potriviți clear cu float: Dacă un element este float la stânga, atunci ar trebui să ștergeți la stânga. Elementul float va continua să plutească, dar elementul șters va apărea sub el pe pagina web.
The clearfix Hack
Dacă un element este mai înalt decât elementul care îl conține și este float, acesta se va „overflow” în afara containerului său.
overflow: auto clearfix  funcționează bine atâta timp cât sunteți în stare să păstrați controlul asupra margin-ului și a padding-ului (altfel puteți vedea bare de defilare). Totuși, noul clearfix hack however este mai sigur de utilizat și următorul cod este folosit pentru majoritatea paginilor web.
Grid of Boxes / Equal Width Boxes
Ce este box-sizing?
Puteți crea cu ușurință trei cutii plutitoare (floating boxes) una lângă alta. Cu toate acestea, când adăugați ceva care mărește lățimea fiecărei cutii (de exemplu, padding sau borders), caseta se va rupe. Proprietatea de dimensionare a cutiei ne permite să includem padding și border în lățimea totală (și înălțimea) a cutiei, asigurându-ne că padding rămâne în interiorul cutiei și că nu se rupe.
Grila casetelor poate fi de asemenea folosită pentru a afișa imagini side by side:
Cutii de înălțime egală (Equal Height Boxes)
Este bine dacă puteți garanta că casetele vor avea întotdeauna aceeași cantitate de conținut în ele. Dar de multe ori, conținutul nu este același. Dacă încercați exemplul de mai sus pe un telefon mobil, veți vedea că conținutul celei de-a doua cutii va fi afișat în afara casetei. Acesta este locul în care CSS3 Flexbox vine la îndemână - deoarece poate întinde automat cutiile pentru a fi la fel de lungă ca cea mai lungă casetă:
Flexbox nu este acceptat în Internet Explorer 10 sau în versiunile anterioare.
Meniu de navigatie (Navigation Menu)
Utilizați float cu o listă de hyperlinkuri pentru a crea un meniu orizontal.
Exemplu de dispunere web (Web Layout Example)
Este, de asemenea, obișnuit să faceți web layouts folosind proprietatea float.
Toate proprietățiile CSS float.
box-sizing Defineste modul în care se calculează lățimea și înălțimea unui element: trebuie să includă sau nu borduri
clear Specifica ce elemente pot pluti lângă elementul șters și pe ce parte
float Specifică modul în care un element trebuie să plutească
overflow Specifică ce se întâmplă dacă conținutul revărsă caseta unui element
overflow-x Specifică ce se poate face cu marginile stânga / dreapta ale conținutului dacă acesta revărsă zona de conținut a elementului
overflow-y Specifică ce trebuie făcut cu marginile de sus / de jos ale conținutului dacă acesta revărsă zona de conținut a elementului

CSS inline-block

The display: inline-block Value
În comparație cu display: inline, diferența majoră este aceea că display: inline-block permite să stabilească o lățime și o înălțime pe element.
De asemenea, cu display: inline-block, marginile de sus și de jos sunt respectate, dar cu display: inline nu sunt.
Față de display: block, diferența majoră este aceea că display: inline-block nu adaugă o pauză de linie după element, astfel încât elementul să poată sta lângă alte elemente.
Utilizarea inline-block pentru a crea legături de navigare. 
O utilizare obișnuită pentru display: inline-block este de a afișa elemente de listă pe orizontală în loc de vertical. 

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 Bară de navigare

Bare de navigare
Navigarea ușor de utilizat este importantă pentru orice site web.
Cu CSS puteți transforma meniuri HTML plictisitoare în bare de navigare cu aspect bun.
Bară de navigare = Lista de legături
O bară de navigare are nevoie de HTML standard ca bază.
Bară de navigare dintr-o listă HTML standard.
O bară de navigare este practic o listă de legături, astfel încât utilizarea elementelor <ul> și <li> are sens perfect.
Link de navigare activ / curent
Adăugați o clasă „activă” la link-ul curent pentru a anunța utilizatorul pe ce pagină se află.
Link-uri centrate & adăugare borders
Adăugați text-align: center la <li> sau <a> pentru a centra legăturile.
Adăugați proprietatea border la <ul> Adăugați un border în jurul barei de navigare. Dacă doriți, de asemenea, borders în interiorul barei de navigare, adăugați un border-bottom la toate elementele <li>, cu excepția ultimului.
Full-height Fixed Vertical Navbar
Bară de navigare orizontală
Există două moduri de a crea o bară de navigare orizontală. Utilizarea elementelor din linie interioară sau flotantă.
Articole de listă inline
O modalitate de a construi o bară de navigare orizontală este de a specifica elementele <li> ca inline, pe lângă codul „standard” de mai sus.
display: inline; - În mod implicit, elementele <li> sunt elemente de tip block. Aici, eliminăm pauzele de linie înainte și după fiecare articol din listă, pentru a le afișa pe o singură linie.
Floating List Items
Un alt mod de a crea o bară de navigare orizontală este să float elementele <li> și să specifici un layout pentru link-urile de navigare.
Link de navigare activ / curent
Adăugați o clasă „active” la link-ul curent pentru a anunța utilizatorul pe ce pagină se află.
Link-uri aliniere dreapta (Right-align links)
Aliniați legăturile din dreapta, plutind elementele din listă spre dreapta (float: right;):
Border Dividers
Adăugați proprietatea border-right la <li> pentru a crea divizori de legături.
Fixed Navigation Bar
Faceți ca bara de navigare să rămână în partea de sus sau de jos a paginii, chiar și atunci când utilizatorul derulează pagina.
Fixed Top
Fixed Bottom
Bară orizontală gri
Sticky Navbar
Adăugați position: sticky; la <ul> pentru a crea sticky navbar.
Un element 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 dată de offset este întâlnită în viewport - apoi se „lipeste”la loc (ca position:fixed).
Internet Explorer, Edge 15 și versiunile anterioare nu acceptă poziționarea sticky. Safari necesită un prefix -webkit- (vezi exemplul de mai sus). 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.
Responsive Topnav
Cum să utilizați interogări media CSS pentru a crea o navigare de sus.
Responsive Sidenav
Cum să utilizați interogări media CSS pentru a crea o navigare receptivă.
Dropdown Navbar
Cum să adăugați un meniu derulant într-o bară de navigare.

CSS Formulare

Formulare CSS
Aspectul unui formular HTML poate fi îmbunătățit mult cu CSS.
Stilizarea câmpurilor de intrare (Styling Input Fields)
Utilizați proprietatea width pentru a determina lățimea câmpului de intrare (input field).
Dacă doriți să stilați un tip de intrare specific, puteți utiliza selectori de atribute:
input [type=text] - va selecta doar câmpurile de tip text
input [type=password] - va selecta doar câmpuri de tip parolă
input [type=number] - va selecta doar câmpuri numerice
Padded Inputs
Utilizați proprietatea padding pentru a adăuga spațiu în câmpul text.
Când aveți multe intrări una după cealaltă, este posibil să doriți să adăugați și o anumită marjă (margin), pentru a adăuga mai mult spațiu în afara lor.
Bordered Inputs
Utilizați proprietatea border pentru a modifica dimensiunea și culoarea border-ului și utilizați proprietatea border-radius pentru a adăuga colțuri rotunjite(corners rounded).
Dacă doriți doar un bottom border, utilizați proprietatea border-bottom.
Colored Inputs
Utilizați proprietatea background-color pentru a adăuga o culoare de fundal la intrare și proprietatea color pentru a schimba culoarea textului.
Focused Inputs
În mod implicit, unele browsere vor adăuga un contur (outline) albastru în jurul intrării atunci când va fi focalizat (faceți click pe). Puteți elimina acest comportament adăugând outline: none; la intrare.
Utilizați selectorul :focus pentru a face ceva cu câmpul de introducere atunci când este focalizat.
Intrare cu pictogramă / imagine(Input with icon/image)
Dacă doriți o pictogramă (icon) în interiorul intrării, utilizați proprietatea background-image și poziționați-o cu proprietatea background-position. Rețineți, de asemenea, că adăugăm un left padding mare pentru a rezerva spațiul pictogramei (icon).
Intrare de căutare animată(Animated Search Input)
În acest exemplu, utilizăm proprietatea CSS transition pentru a anima lățimea (width) intrării de căutare atunci când devine focus. 
Styling Textareas
Utilizați proprietatea resize pentru a împiedica redimensionarea textului (dezactivați „grabber” din colțul din dreapta jos):
Styling Select Menus
Stilizarea butoanelor de intrare(Styling Input Buttons)
Formular responsiv(Responsive Form)
Redimensionați fereastra browserului pentru a vedea efectul. Când ecranul are o lățime mai mică de 600px, faceți ca cele două coloane să se stivească una peste alta, în loc de una lângă alta.
Interogări media pentru a crea un formular cu răspuns.

CSS Contoare

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

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

CSS 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 Culori

Culori CSS
CSS acceptă 140+ nume de culoare, valori HEX, valori RGB, valori RGBA, valori HSL, valori HSLA și opacitate.
Culori RGBA
Valorile de culoare RGBA sunt o extensie a valorilor de culoare RGB cu un canal alfa - care specifică opacitatea unei culori.
O valoare de culoare RGBA este specificată cu: rgba (roșu, verde, albastru, alfa)/rgba(red, green, blue, alpha). Parametrul alfa este un număr între 0,0 (complet transparent) și 1,0 (complet opac).
HSL Colors
HSL înseamnă Hue, Saturation and Lightness.
O valoare de culoare HSL este specificată cu: hsl(hue, saturation, lightness).
Hue este un grad pe roata de culoare (de la 0 la 360):
0 (sau 360) este roșu
120 este verde
240 este albastru
Saturation este o valoare procentuală: 100% este culoarea completă.
Lightness este, de asemenea, un procent; 0% este întunecat (negru) și 100% alb.
Culorile HSLA
Valorile de culoare HSLA sunt o extensie a valorilor de culoare HSL cu un canal alfa - care specifică opacitatea unei culori.
O valoare de culoare HSLA este specificată cu: hsla(hue, saturation, lightness, alpha), unde parametrul alfa definește opacitatea. Parametrul alfa este un număr între 0,0 (complet transparent) și 1,0 (complet opac).
Opacitate
Proprietatea CSS opacity stabilește opacitatea pentru întregul element (atât culoarea de fundal, cât și textul vor fi opace / transparente).
Valoarea proprietății de opacitate trebuie să fie un număr între 0,0 (complet transparent) și 1,0 (complet opac).

CSS Gradienți

Gradienți CSS
Gradienții CSS vă permit să afișați tranziții netede între două sau mai multe culori specificate.
CSS definește două tipuri de gradienți:
Gradienți liniari/Linear Gradients (coboară / în sus / stânga / dreapta / în diagonală)
Gradienți radiali/Radial Gradients (definiți de centrul lor)
Gradienți liniari CSS
Pentru a crea un gradient liniar trebuie să definiți cel puțin două opriri de culoare (color stops). Oprirea culorilor (color stops) se referă la culorile dintre care doriți să faceți tranziții netede. Puteți seta, de asemenea, un punct de plecare și o direcție (sau un unghi) împreună cu efectul de gradient.
Gradient liniar - de sus în jos (aceasta este implicit)
Gradient liniar care începe de sus. Începe roșu, iar trecerea se face la galben
Gradient liniar - de la stânga la dreapta (Linear Gradient - Left to Right)
Gradient liniar care pornește de la stânga. Începe roșu, trecerea se face la galben.
Gradient liniar - diagonală (Linear Gradient - Diagonal)
Puteți face un gradient în diagonală specificând atât pozițiile de pornire orizontale, cât și cele verticale.
Gradient liniar care începe în stânga sus (și merge spre dreapta jos). Începe roșu, trecerea se face la galben.
Utilizarea unghiurilor (Using Angles)
Dacă doriți un control mai mare asupra direcției gradientului, puteți defini un unghi, în loc de direcțiile predefinite (în jos, în sus, în dreapta, în stânga, în dreapta jos etc.).
Unghiul este specificat ca un unghi între o linie orizontală și linia de gradient.
Modul de utilizare a unghiurilor pe gradienți liniari.
Folosirea mai multor opriri de culori (Using Multiple Color Stops)
Un gradient liniar (de sus în jos) cu mai multe opriri de culoare(multiple color stops).
Un gradient liniar (de la stânga la dreapta) cu culoarea curcubeului și cu un text.
Utilizarea transparenței (Using Transparency)
De asemenea, gradienții CSS acceptă transparența, care poate fi utilizată pentru a crea efecte de decolorare.
Pentru a adăuga transparență, folosim funcția rgba() pentru a defini oprirea culorii (color stops). Ultimul parametru din funcția rgba () poate fi o valoare de la 0 la 1 și definește transparența culorii: 0 indică transparență completă, 1 indică culoarea completă (fără transparență).
Un gradient liniar care pornește de la stânga. Începe complet transparent, trecând la roșu complet.
Repetarea unui gradient liniar (Repeating a linear-gradient)
Funcția repeating-linear-gradient() este utilizată pentru a repeta gradienți liniari:
Gradienți radiali CSS (CSS Radial Gradients)
Un gradient radial este definit de centrul său.
Pentru a crea un gradient radial trebuie să definiți, de asemenea, cel puțin două opriri de culoare (color stops).
În mod implicit, forma este de elipsă, dimensiunea este cea mai îndepărtată de colț, iar poziția este centrală.
Gradient radial - Opriri uniforme ale culorilor/ Radial Gradient - Evenly Spaced Color Stops  (aceasta este implicită)
Un gradient radial cu opriri uniforme de culoare distanțate.
Gradient radial - Opriri de culori distanțate diferit / Radial Gradient - Differently Spaced Color Stops
Un gradient radial cu opriri de culoare distanțate diferit.
Setați forma (Set Shape)
Parametrul shape definește forma. Poate lua cercul de valori sau elipsa. Valoarea implicită este elipsa.
Un gradient radial sub forma unui cerc.
Utilizarea cuvintelor cheie de dimensiuni diferite (Use of Different Size Keywords)
Parametrul size definește dimensiunea gradientului. Poate lua patru valori: closest-side, farthest-side, closest-corner, farthest-corner.
Un gradient radial cu cuvinte cheie de dimensiuni diferite.
Repetarea unui gradient radial (Repeating a radial-gradient)
Funcția repeating-radial-gradient() este utilizată pentru a repeta gradienți radiali.
Proprietăți CSS pentru gradient
background-image - Setează una sau mai multe imagini de fundal pentru un element.

CSS Efecte de umbră

Efecte de umbră CSS
Cu CSS puteți adăuga umbră textului și elementelor.
Proprietăți: text-shadow, box-shadow.
Umbre multiple (Multiple Shadows)
Pentru a adăuga mai mult de o umbră textului, puteți adăuga o listă de umbre separate de virgule.
Umbră de strălucire neon roșu și albastru.
Text alb cu umbra neagră, albastră și albastru închis
Puteți utiliza, de asemenea, proprietatea text-shadow pentru a crea un chenar simplu în jurul unui text (fără umbre)
Proprietatea CSS box-shadow
Proprietatea CSS box-shadow aplică umbre pentru elemente.
În cea mai simplă utilizare, specificați doar umbra orizontală și umbra verticală.
Apoi, adăugați o culoare la umbră.
Apoi, adăugați un efect de estompare la umbră.
Puteți adăuga, de asemenea, umbre la pseudo-elemente ::before și ::after pentru a crea un efect interesant.
Cards
Un exemplu de utilizare a proprietății box-shadow pentru a crea paper-like cards.
Proprietăți CSS Shadow
box-shadow - Adaugă una sau mai multe umbre la un element.
text-shadow - Adăugă una sau mai multe umbre la un text.

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 Tooltip

CSS Tooltip
Creați tooltips cu CSS.
Un tooltip este adesea folosit pentru a specifica informații suplimentare despre ceva când utilizatorul mută indicatorul mouse-ului peste un element.
Basic Tooltip
Creați un tooltip care apare când utilizatorul mută mouse-ul peste un element.
HTML: Utilizați un element container (cum ar fi <div>) și adăugați-i clasa „tooltip”. Când utilizatorul trece cu mouse-ul peste acest <div>, va afișa textul de tip tooltip.
Textul de tip tooltip este plasat în interiorul unui element inline (cum ar fi <span>) cu class = "tooltiptext".
CSS: Clasa tooltip folosește position:relative, care este necesară pentru poziționarea textului tooltip (position:absolute).
Consultați exemplele de mai jos despre cum să poziționați indicatorul.
Clasa tooltiptext conține textul actual de tip tooltip. Este ascunsă în mod implicit și va fi vizibilă în hover (vezi mai jos). De asemenea, i-am adăugat câteva stiluri de bază: 120px lățime (width), culoare de fundal neagră, culoare text alb, text centrat (black background color, white text color, centered text) și 5px top și bottom padding.
Proprietatea CSS border-radius este utilizată pentru a adăuga colțuri rotunjite (rounded corners) tooltip text.
Selectorul :hover este utilizat pentru a afișa textul de tip tooltip atunci când utilizatorul mută mouse-ul peste <div> cu class="tooltip".
Positioning Tooltips
tooltip-ul este plasat la dreapta (left: 105%) a textului „hoverable” (<div>). De asemenea, rețineți că partea de sus:-5px (top:-5px) este utilizată pentru a-l plasa în mijlocul elementului container. Folosim numărul 5 deoarece textul de tip tooltip are o acoperire de 5px în partea de sus și de jos (top and bottom padding). Dacă măriți padding, creșteți și valoarea proprietății de top pentru a vă asigura că aceasta rămâne la mijloc (dacă este ceea ce doriți). Același lucru este valabil dacă doriți ca tooltip să fie plasat la stânga.
Dacă doriți ca tooltip să apară în partea de sus sau de jos ( top sau bottom), consultați exemplele de mai jos. Rețineți că folosim proprietatea margin-left cu o valoare de minus 60 pixeli. Acest lucru este pentru a centra tooltip deasupra/sub (above/below ) textul hoverable. Este setat la jumătatea lățimii tooltip-ului (120/2 = 60).
Instrumente săgeți (Tooltip Arrows)
Pentru a crea o săgeată (arrow) care ar trebui să apară dintr-o parte specifică a tooltip-ului, adăugați conținut „empty” după tooltip, cu pseudo-element class ::after împreună cu proprietatea content. Săgeata în sine este creată folosind borders. Acest lucru va face ca tooltip-ul să pară un speech bubble.
Adăugare săgeată la partea de jos a tooltip-ului.
Poziționarea săgeții în interiorul tooltip: top: 100% va așeza săgeata în partea de jos a tooltip. left: 50% va centra săgeata.
Proprietatea border-width specifică dimensiunea săgeții. Dacă schimbați acest lucru, modificați, de asemenea, valoarea margin-left. Aceasta va menține săgeata centrată.
Border-color este utilizată pentru a transforma conținutul într-o săgeată. Am stabilit top border la negru, iar restul la transparent. Dacă toate părțile ar fi negre, s-ar termina cu o black square box.
Adăugați o săgeată în partea de sus a tooltip.
Adăugați o săgeată la stânga tooltip-ului.
Adăugați o săgeată la dreapta tooltip-ului.
Fade In Tooltips (Animation)
Dacă doriți să aplicați fade în tooltip text când urmează să fie vizibil, puteți utiliza proprietatea CSS transition împreună cu proprietatea opacity și puteți trece de la a fi complet invizibil la 100% vizibil, într-un număr de secunde specificate (1 secundă în exemplul nostru).

CSS Butoane

Butoane CSS
Aflați cum puteți stabili butoanele folosind CSS.
Stilarea butonului de bază (Basic Button Styling)
Culorile butoanelor (Button Colors)
Utilizați proprietatea background-color pentru a schimba culoarea de fundal a unui buton
Mărimea butoanelor (Button Sizes).
Utilizați proprietatea font-size pentru a modifica dimensiunea fontului unui buton.
Utilizați proprietatea padding pentru a schimba umplerea unui buton.
Butoane rotunjite (Rounded Buttons)
Utilizați proprietatea border-radius pentru a adăuga colțuri rotunjite la un buton.
Margini butoane colorate (Colored Button Borders)
Utilizați proprietatea border pentru a adăuga un chenar colorat la un buton
Butoane Hoverable
Utilizați selectorul :hover pentru a schimba stilul unui buton atunci când deplasați mouse-ul peste el.
Utilizați proprietatea transition pentru a determina viteza efectului „hover”.
Butoane Shadow
Utilizați proprietatea box-shadow pentru a adăuga umbre la un buton.
Butoane dezactivate (Disabled Buttons)
Utilizați proprietatea opacity pentru a adăuga transparență unui buton (creează un aspect „disabled”).
Puteți adăuga, de asemenea, proprietatea cursor cu o valoare „nepermisă” (not-allowed), care va afișa un „no parking sign” când faceți click peste buton.
Lățimea butonului (Button Width)
În mod implicit, dimensiunea butonului este determinată de conținutul textului său (la fel de larg ca și conținutul său). Utilizați proprietatea width pentru a modifica lățimea unui buton.
Grupuri de butoane (Button Groups)
Eliminați marginile și adăugați float:left la fiecare buton pentru a crea un grup de butoane.
Grup de butoane mărginite (Bordered Button Group)
Utilizați proprietatea border pentru a crea un grup de butoane mărginite.
Grup vertical de butoane (Vertical Button Group)
Utilizați display:block în loc de float:left pentru a grupa butoanele unul sub altul, în loc de alături
Buton pe imagine (Button on Image)
Adăugați un buton la o imagine.
Butoane animate (Animated Buttons)
Adăugați o săgeată la hover.
Adăugați un efect „apăsat” (pressed) pe click.
Fade in on hover.
Adăugați un efect „ripple” la click.

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

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

CSS Responsive Web Design - Viewport

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

CSS Responsive Web Design - Grid-View

Responsive Web Design - Grid-View
Ce este un Grid-View?
Multe pagini web se bazează pe un grid-view, ceea ce înseamnă că pagina este împărțită în coloane.
Un responsive grid-view are adesea 12 coloane și are o lățime totală de 100% și se va micsora și se va extinde pe măsură ce redimensionați fereastra browserului.
Construirea unui responsive Grid-View
Vom începe să construim un responsive Grid-View.
Mai întâi asigurați-vă că toate elementele HTML au proprietatea box-sizing setată pe border-box. Acest lucru asigură că padding și border sunt incluse în lățimea totală și înălțimea (total width and height) elementelor.

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 Grid Introducere

CSS Grid Layout Module
Grid Layout
CSS Grid Layout Module oferă un sistem de dispunere bazat pe grilă, cu rânduri și coloane, ceea ce facilitează proiectarea paginilor web fără a fi nevoie să folosiți plutitoare și poziționare (floats și positioning).
Asistență browser(Browser Support)
Proprietățiile grid sunt acceptate în toate browserele moderne.
Elemente grid
Un layout grid este format dintr-un element părinte, cu unul sau mai multe elemente copil.
Proprietatea display
Un element HTML devine un container grid atunci când proprietatea sa display este setată pe grid sau în inline-grid.
Toți copiii direcți (direct children) ai containerului grid devin automat elemente grid.
Coloane Grid (Grid Columns)
Liniile verticale ale elementelor grid se numesc coloane (columns).
Rânduri Grid (Grid Rows)
Liniile orizontale ale elementelor grid se numesc rânduri (rows).
Grid Gaps
Spațiile dintre fiecare coloană/rând (column/row) se numesc gaps.
Puteți ajusta dimensiunea gapului folosind una dintre următoarele proprietăți:grid-column-gap, grid-row-gap, grid-gap.
Proprietatea grid-column-gap stabilește diferența dintre coloane.
Proprietatea grid-row-gap stabilește diferența dintre rânduri.
Proprietatea grid-gap este o proprietate shorthand pentru proprietățile grid-column-gap și grid-row-gap.
Proprietatea grid-gap poate fi, de asemenea, folosită pentru a seta atât row gap cât și column gap într-o singură valoare.
Linii Grid (Grid Lines)
Liniile dintre coloane se numesc linii coloană (column lines).
Liniile dintre rânduri se numesc linii rând (row lines).
Consultați numerele de linie atunci când introduceți un element grid într-un container grid.
Plasați un element grid la linia coloanei 1 și lăsați-o să se încheie pe linia 3 a coloanei.
Plasați un element grid la linia 1 de rând și lăsați-o să se încheie pe linia 3 de rând.
 

CSS Grid Container

Grid Container
Pentru a face ca un element HTML să se comporte ca un container grid, trebuie să setați proprietatea display la grid sau la inline-grid.
Containerele grid constau din elemente grid, plasate în coloane și rânduri (columns și rows).
Proprietatea grid-template-columns
Proprietatea grid-template-columns definește numărul de coloane din aspectul gridului dvs. (grid layout) și poate defini lățimea (width) fiecărei coloane.
Valoarea este un space-separated-list, unde fiecare valoare definește lungimea coloanei respective.
Dacă doriți ca aspectul gridului (grid layout) să conțină 4 coloane, specificați lățimea (width) celor 4 coloane sau „auto” dacă toate coloanele trebuie să aibă aceeași lățime (width).
Proprietatea grid-template-rows definește înălțimea (height) fiecărui rând (row).
Valoarea este un space-separated-list, unde fiecare valoare definește înălțimea (height) rândului respectiv (row).
Proprietatea justify-content este utilizată pentru alinierea întregului grid în interiorul containerului.
Lățimea (width) totală a gridului trebuie să fie mai mică decât lățimea (width) containerului pentru ca proprietatea justify-content să aibă vreun efect.
Proprietatea align-content este utilizată pentru alinierea verticală (vertically align) a întregului grid în interiorul containerului.
Înălțimea (height) totală a gridului trebuie să fie mai mică decât înălțimea (height) containerului pentru ca proprietatea align-content să aibă vreun efect.

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 WHERE

Clauza SQL WHERE
Clauza WHERE este folosită pentru a filtra înregistrările.
Clauza WHERE este utilizată pentru a extrage doar acele înregistrări care îndeplinesc o condiție specificată.
Sintaxa WHERE
SELECT column1, column2, ...
FROM table_name
WHERE condition;
Clauza WHERE nu este utilizată numai în instrucțiunea SELECT, ci este utilizată și în instrucțiunea UPDATE, DELETE etc.
Exemplu de clauză WHERE
Următoarea declarație SQL selectează toți clienții din țara „Mexic”, în tabelul „Customers”:
SELECT * FROM Customers
WHERE Country='Mexic';
Text Fields vs. Numeric Fields
SQL necesită citate unice în jurul valorilor de text (majoritatea sistemelor de baze de date vor permite, de asemenea, ghilimele duble).
Cu toate acestea, câmpurile numerice nu trebuie incluse între ghilimele:
SELECT * FROM Customers
WHERE CustomerID=1;
Operatori în clauza WHERE
În clauza WHERE pot fi folosiți următorii operatori:
=  Egal
> Mai mare decât
< Mai mic decât
> = Mai mare sau egal
<= Mai mic sau egal
<> Nu este egal. Notă: În unele versiuni de SQL, acest operator poate fi scris ca !=
BETWEEN - Între un anumit interval
LIKE - Căutați un model
IN - Pentru a specifica mai multe valori posibile pentru o coloană

SQL AND, OR și NOT

Operatorii SQL AND, OR și NOT
Clauza WHERE poate fi combinată cu operatorii AND, OR și NOT.
Operatorii AND și OR sunt folosiți pentru a filtra înregistrările pe baza mai multor condiții:
Operatorul AND afișează o înregistrare dacă toate condițiile separate de AND sunt TRUE.
Operatorul OR afișează o înregistrare dacă oricare dintre condițiile separate de OR este TRUE.
Operatorul NOT afișează o înregistrare dacă condițiile (condițiile) sunt NOT TRUE.
Sintaxa AND
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
Sintaxa OR
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
Sintaxa NOT
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
Exemple SQL AND, OR și NOT
Exemplu AND
Următoarea instrucțiune SQL selectează toate câmpurile din „Customers” unde țara este „Germania” AND orașul este „Berlin”:
SELECT * FROM Customers
WHERE Country='Germania' AND City='Berlin';
Exemplu OR
Următoarea instrucțiune SQL selectează toate câmpurile din „Customers” unde orașul este „Berlin” OR „Munchen”:
SELECT * FROM Customers
WHERE City='Berlin' OR City='Munchen';
Următoarea instrucțiune SQL selectează toate câmpurile din „Customers” unde țara este „Germania” OR „Spania”:
SELECT * FROM Customers
WHERE Country='Germania' OR Country='Spania';
Exemplu NOT
Următoarea instrucțiune SQL selectează toate câmpurile din „Customers” în care țara NOT este „Germania”:
SELECT * FROM Customers
WHERE NOT Country='Germania';
Combinarea operatorilor AND, OR și NOT
Puteți combina, de asemenea, operatorii AND, OR și NOT.
Următoarea instrucțiune SQL selectează toate câmpurile din „Customers" unde țara este „Germania” AND orașul trebuie să fie „Berlin” OR „Munchen” (folosiți paranteza pentru a forma expresii complexe):
SELECT * FROM Customers
WHERE Country='Germania' AND (City='Berlin' OR City='Munchen');
Următoarea instrucțiune SQL selectează toate câmpurile din „Customers" în care țara NOT este „Germania” și NOT „SUA”:
SELECT * FROM Customers
WHERE NOT Country='Germania' AND NOT Country='USA';

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 LIKE

Operatorul SQL LIKE
Operatorul LIKE este folosit într-o clauză WHERE pentru a căuta un model specificat într-o coloană.
Există două wildcards folosite adesea împreună cu operatorul LIKE:
% - Semnul procentual reprezintă zero, unu sau mai multe caractere
_ - Sublinierea reprezintă un singur personaj
MS Access folosește un asterisc (*) în loc de semnul procentual (%) și un semn de întrebare (?) În loc de subliniere (_).
Semnul procentual și sublinierea pot fi de asemenea utilizate în combinații!
Sintaxa LIKE
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
Puteți combina, de asemenea, orice număr de condiții folosind operatorii AND sau OR.
Iată câteva exemple care arată diferiți operatori LIKE cu wildcard-uri „%” și „_”:
WHERE CustomerName LIKE 'a%'  -  Găsește toate valorile care încep cu „a”
WHERE CustomerName LIKE '%a'  -  Găsește orice valori care se termină cu "a"
WHERE CustomerName LIKE '%or%'  -  Găsește orice valori care au „sau” în orice poziție
WHERE CustomerName LIKE '_r%'  -  Găsește orice valori care au „r” în a doua poziție
WHERE CustomerName LIKE 'a__%'  -  Găsește orice valori care încep cu „a” și au cel puțin 3 caractere în lungime
WHERE ContactName LIKE 'a%o'  -  Găsește orice valori care încep cu "a" și se termină cu "o"
Exemple SQL LIKE
Următoarea instrucțiune SQL selectează toți clienții cu un nume client începând cu „a”:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';
Următoarea instrucțiune SQL selectează toți clienții cu un nume client care se termină cu „a”:
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';
Următoarea instrucțiune SQL selectează toți clienții cu un nume client care au „or” în orice poziție:
SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';
Următoarea instrucțiune SQL selectează toți clienții cu un nume client care are „r” în a doua poziție:
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';
Următoarea instrucțiune SQL selectează toți clienții cu un nume client care începe cu „a” și are cel puțin 3 caractere în lungime:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a__%';
Următoarea instrucțiune SQL selectează toți clienții cu un nume de contact care începe cu „a” și se termină cu „o”:
SELECT * FROM Customers
WHERE ContactName LIKE 'a%o';
Următoarea instrucțiune SQL selectează toți clienții cu un nume client care NU începe cu „a”:
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';

SQL Wildcards

SQL Wildcards
Caracterele SQL Wildcards
Un caracter wildcard este folosit pentru a substitui unul sau mai multe caractere dintr-un șir.
Caracterele wildcard sunt utilizate cu operatorul SQL LIKE. Operatorul LIKE este folosit într-o clauză WHERE pentru a căuta un model specificat într-o coloană.
Caractere wildcard în MS Access
* - Reprezintă zero sau mai multe caractere: bl* finds bl, black, blue and blob
? - Reprezintă un singur caracter: h?t finds hot, hat, and hit
[] - Reprezintă orice caracter dintre paranteze: h[oa]t finds hot and hat, but not hit
! - Reprezintă orice caracter care nu se află între paranteze:  h[!oa]t finds hit, but not hot and hat
- - Reprezintă o serie de caractere: c[a-b]t finds cat and cbt
# - Reprezintă orice singur caracter numeric: 2#5 finds 205, 215, 225, 235, 245, 255, 265, 275, 285, and 295
Caractere wildcard în SQL Server:
% - Reprezintă zero sau mai multe caractere: bl% finds bl, black, blue, and blob
_ - Reprezintă un singur caracter: h_t finds hot, hat, and hit
[] - Reprezintă orice caracter dintre paranteze: h[oa]t finds hot and hat, but not hit
^ - Reprezintă orice caracter care nu se află între paranteze: h[^oa]t finds hit, but not hot and hat
- - Reprezintă o serie de caractere: c[a-b]t finds cat and cbt
Toate wildcards-urile pot fi, de asemenea, utilizate în combinații!
Iată câteva exemple care arată diferiți operatori LIKE cu wildcard-uri „%” și „_”:
WHERE CustomerName LIKE 'a%'  -  Găsește orice valoarecare începe cu „a”
WHERE CustomerName LIKE '%a'  -  Găsește orice valoare care se termină cu "a"
WHERE CustomerName LIKE '%or%'  -  Găsește orice valoare care are „or” în orice poziție
WHERE CustomerName LIKE '_r%'  -  Găsește orice valoare care are „r” în a doua poziție
WHERE CustomerName LIKE 'a_%_%'  -  Găsește orice valoare care începe cu „a” și are cel puțin 3 caractere în lungime
WHERE ContactName LIKE 'a%o'  -  Găsește orice valoare care începe cu "a" și se termină cu "o"
Utilizarea Wildcardului %
Următoarea instrucțiune SQL selectează toți clienții cu un oraș care începe cu „ber”:
SELECT * FROM Customers
WHERE City LIKE 'ber%';
Următoarea instrucțiune SQL selectează toți clienții cu un oraș care conține patternul "es":
SELECT * FROM Customers
WHERE City LIKE '%es%';
Folosirea Wildcardului  _
Următoarea instrucțiune SQL selectează toți clienții cu un oraș care începe cu orice caracter, urmată de „ondon”:
SELECT * FROM Customers
WHERE City LIKE '_ondon';
Următoarea instrucțiune SQL selectează toți clienții cu un oraș care începe cu „L”, urmat de orice caracter, urmat de „n”, urmat de orice caracter, urmat de „on”:
SELECT * FROM Customers
WHERE City LIKE 'L_n_on';
Utilizarea wildcard-ului [charlist]
Următoarea instrucțiune SQL selectează toți clienții cu un oraș care începe cu „b”, „s” sau „p”:
SELECT * FROM Customers
WHERE City LIKE '[bsp]%';
Următoarea instrucțiune SQL selectează toți clienții cu un oraș care începe cu „a”, „b” sau „c”:
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
Utilizarea wildcard-ului [!charlist] 
Următoarele două instrucțiuni SQL selectează toți clienții cu un oraș care NOT (NU) începe cu "b", "s" sau "p":
SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';
sau:
SELECT * FROM Customers
WHERE City NOT LIKE '[bsp]%';

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 SELECT INTO

SQL SELECT INTO
Instrucțiunea SQL SELECT INTO
Instrucțiunea SELECT INTO copiază datele dintr-o tabelă într-un nou tabel.
Sintaxa SELECT INTO
Copiați toate coloanele într-un nou tabel:
SELECT *
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;
Copiați doar câteva coloane într-un nou tabel:
SELECT column1, column2, column3, ...
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;
Noua tabelă va fi creată cu numele și coloanele definite în tabelul vechi. Puteți crea nume de coloane noi folosind clauza AS.
Exemple SQL SELECT INTO
Următoarea instrucțiune SQL creează o copie de rezervă a Clienților (Customers):
SELECT * INTO CustomersBackup2017
FROM Customers;
Următoarea instrucțiune SQL folosește clauza IN pentru a copia tabela într-un nou tabel într-o altă bază de date:
SELECT * INTO CustomersBackup2017 IN 'Backup.mdb'
FROM Customers;
Următoarea instrucțiune SQL copiază doar câteva coloane într-un nou tabel:
SELECT CustomerName, ContactName INTO CustomersBackup2017
FROM Customers;
Următoarea instrucțiune SQL copiază doar clienții (customers) germani într-un nou tabel:
SELECT * INTO CustomersGermania
FROM Customers
WHERE Country = 'Germania';
Următoarea instrucțiune SQL copiază date din mai multe tabele într-un nou tabel:
SELECT Customers.CustomerName, Orders.OrderID
INTO CustomersOrderBackup2017
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
SELECT INTO poate fi, de asemenea, utilizat pentru a crea un tabel nou, gol, folosind schema altuia. Adaugă doar o clauză WHERE care determină ca interogarea să nu returneze date:
SELECT * INTO newtable
FROM oldtable
WHERE 1 = 0;

SQL Proceduri stocate

SQL Stored Procedures
Proceduri stocate SQL pentru SQL Server (SQL Stored Procedures for SQL Server)
Ce este o procedură stocată (Stored Procedure)?
O procedură stocată (Stored Procedure) este un cod SQL pregătit pe care îl puteți salva, astfel încât codul poate fi reutilizat din nou și din nou.
Așadar, dacă aveți o interogare SQL pe care o scrieți de mai multe ori, salvați-o ca o procedură stocată (Stored Procedure) și apoi apelați-o pentru a o executa.
De asemenea, puteți trece parametrii la o procedură stocată (Stored Procedure), astfel încât procedura stocată (Stored Procedure) să poată acționa în funcție de valoarea (valorile) parametrului care este trecută.
Sintaxa de procedură stocată (Stored Procedure)
CREATE PROCEDURE procedure_name
AS
sql_statement
GO;
Execute a Stored Procedure
EXEC procedure_name;
Exemplu de procedură stocată (stored procedure)
Următoarea instrucțiune SQL creează o procedură stocată (stored procedure) numită "SelectAllCustomers" care selectează toate înregistrările din tabelul "Clienți" (Customers):
CREATE PROCEDURE SelectAllCustomers
AS
SELECT * FROM Customers
GO;
Executați procedura stocată (stored procedure) de mai sus după cum urmează:
EXEC SelectAllCustomers;
Procedura stocată cu un singur parametru
Următoarea instrucțiune SQL creează o procedură stocată (stored procedure) care selectează Clienții (Customers) dintr-un anumit oraș (City) din tabelul „Clienți” (Customers):
CREATE PROCEDURE SelectAllCustomers @City nvarchar(30)
AS
SELECT * FROM Customers WHERE City = @City
GO;
Executați procedură stocată (stored procedure) mai sus după cum urmează:
EXEC SelectAllCustomers @City = "Londra";
Procedură stocată cu mai mulți parametri
Configurarea mai multor parametri este foarte ușoară. Trebuie doar să enumerați fiecare parametru și tipul de date separat printr-o virgulă, așa cum se arată mai jos.
Următoarea instrucțiune SQL creează o procedură stocată (stored procedure) care selectează clienții (Customers) dintr-un anumit oraș (City) cu un anumit cod poștal (PostalCode) din tabelul „Clienți” (Customers):
CREATE PROCEDURE SelectAllCustomers @City nvarchar(30), @PostalCode nvarchar(10)
AS
SELECT * FROM Customers WHERE City = @City AND PostalCode = @PostalCode
GO;
Executați procedura stocată (stored procedure) mai sus după cum urmează:
EXEC SelectAllCustomers @City = "Londra", @PostalCode = "WA1 1DP";

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 ALTER TABLE

SQL ALTER TABLE
Instrucțiunea SQL ALTER TABLE
Instrucțiunea ALTER TABLE este utilizată pentru a adăuga, șterge sau modifica coloane dintr-un tabel existent.
Instrucțiunea ALTER TABLE este de asemenea folosită pentru a adăuga și a scădea diverse constrângeri pe un tabel existent.
ALTER TABLE - ADD Column
Pentru a adăuga o coloană într-un tabel, utilizați următoarea sintaxă:
ALTER TABLE table_name
ADD column_name datatype;
Următorul SQL adaugă o coloană „Email” la tabelul „Clienți” (Customers):
ALTER TABLE Customers
ADD Email varchar(255);
ALTER TABLE - DROP COLUMN
Pentru a șterge o coloană dintr-un tabel, utilizați următoarea sintaxă (observați că unele sisteme de baze de date nu permit ștergerea unei coloane):
ALTER TABLE table_name
DROP COLUMN column_name;
Următorul SQL șterge coloana „Email” din tabelul „Clienți” (Customers):
ALTER TABLE Customers
DROP COLUMN Email;
ALTER TABLE - ALTER/MODIFY COLUMN
Pentru a modifica tipul de date al unei coloane dintr-un tabel, utilizați următoarea sintaxă:
SQL Server / MS Access:
ALTER TABLE table_name
ALTER COLUMN column_name datatype;
My SQL / Oracle (versiunea anterioară 10G):
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
Oracle 10G și mai târziu:
ALTER TABLE table_name
MODIFY column_name datatype;
Exemplu SQL ALTER TABLE
Creați tabelul „Persoane” (Persons):
Acum vrem să adăugăm o coloană numită "DateOfBirth" în tabelul "Persoane"(Persons).
Folosim următoarea instrucțiune SQL:
ALTER TABLE Persons
ADD DateOfBirth date;
Observați că noua coloană, "DateOfBirth", este de tip date (data type) și va păstra o dată. Data type specifică ce tip de date poate conține coloana. 
Exemplu Modificați Data Type
Acum dorim să schimbăm tipul de date (Data Type) al coloanei numită „DateOfBirth” din tabelul „Persoane”(Persons).
Folosim următoarea instrucțiune SQL:
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;
Observați că coloana „DateOfBirth” are acum un tip year și va păstra year într-un format de două sau patru cifre.
Exemplu DROP COLUMN
În continuare, dorim să ștergem coloana numită „DateOfBirth” din tabelul „Persoane”(Persons).
Folosim următoarea instrucțiune SQL:
ALTER TABLE Persons
DROP COLUMN DateOfBirth;

 

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 DEFAULT

SQL DEFAULT 
SQL Restrângerea DEFAULT (SQL DEFAULT Constraint)
Restrângerea DEFAULT este utilizată pentru a furniza o valoare implicită pentru o coloană.
Valoarea implicită va fi adăugată la toate înregistrările noi, dacă nu este specificată nicio altă valoare.
SQL DEFAULT în CREATE TABLE
Următorul SQL stabilește o valoare DEFAULT pentru coloana „Oraș” (City) atunci când se creează tabelul „Persoane” (Persons):
SQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    City varchar(255) DEFAULT 'Sandnes'
);
Restrângerea DEFAULT poate fi de asemenea folosită pentru a insera valori system, utilizând funcții precum GETDATE ():
CREATE TABLE Orders (
    ID int NOT NULL,
    OrderNumber int NOT NULL,
    OrderDate date DEFAULT GETDATE()
);
SQL DEFAULT în ALTER TABLE
Pentru a crea o restricție DEFAULT pe coloana „Oraș” (City) atunci când tabelul este deja creat, utilizați următorul SQL:
MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes';
SQL Server:
ALTER TABLE Persons
ADD CONSTRAINT df_City
DEFAULT 'Sandnes' FOR City;
MS Access:
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'Sandnes';
Oracle:
ALTER TABLE Persons
MODIFY City DEFAULT 'Sandnes';
Eliminare constrângere DEFAULT (DROP a DEFAULT Constraint)
Pentru a elimina o constrângere DEFAULT, utilizați următorul SQL:
MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT;
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;

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

SQL Găzduire

SQL Găzduire (SQL Hosting)
Dacă doriți ca site-ul dvs. web să poată stoca și prelua date dintr-o bază de date, serverul dvs. web ar trebui să aibă acces la o bază de date (database-system) care utilizează limbajul SQL.
Dacă serverul dvs. web este găzduit de un furnizor de servicii Internet ( Internet Service Provider) (ISP), va trebui să căutați planuri de găzduire SQL (SQL hosting).
Cele mai frecvente baze de date de găzduire SQL (SQL hosting databases) sunt MS SQL Server, Oracle, MySQL și MS Access.
MS SQL Server
Microsoft SQL Server este un software popular de bază de date pentru site-uri web bazate pe baze de date (database-driven) cu trafic ridicat.
SQL Server este un sistem de baze de date SQL (SQL database system) foarte puternic, robust și complet prezentat.
Oracle
Oracle este, de asemenea, un software popular de baze de date pentru site-uri web bazate pe baze de date cu trafic ridicat.
Oracle este un sistem de baze de date SQL foarte puternic, robust și complet prezentat.
MySQL
MySQL este, de asemenea, un software popular de baze de date pentru site-uri web.
MySQL este un sistem de baze de date SQL foarte puternic, robust și complet caracterizat.
MySQL este o alternativă ieftină la soluțiile scumpe Microsoft și Oracle.
Access
Când un site web necesită doar o bază de date simplă, Microsoft Access poate fi o soluție.
Access-ul nu este potrivit pentru traficul foarte ridicat și nu este la fel de puternic ca MySQL, SQL Server sau Oracle.

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 Comentarii

Comentarii în PHP
Un comentariu în cod PHP este o linie care nu este executată ca parte a programului. Singurul său scop este să fie citit de cineva care se uită la cod.
Comentariile pot fi folosite pentru:
Lasă-i pe alții să înțeleagă codul tău
Reamintește-ți ce ai făcut - Majoritatea programatorilor s-au confruntat cu revenirea la propria muncă un an sau doi mai târziu și trebuie să-și dea seama ce au făcut. Comentariile îți pot aminti la ce te gândeai când ai scris codul
PHP acceptă mai multe moduri de a comenta:
Sintaxă pentru comentarii cu o singură linie (single-line comment):
<!DOCTYPE html>
<html>
<body>
<?php
//  Acesta este un comentariu cu o singură linie (single-line comment)
# Acesta este, de asemenea, un comentariu cu o singură linie (single-line comment)
?>
</body>
</html>
Sintaxa pentru comentarii cu mai multe linii (multiple-line comments):
<!DOCTYPE html>
<html>
<body>
<?php
/*
Acesta este un block de comentarii cu mai multe linii (multiple-lines comment block)
care se întinde pe multiple linii
*/
?>
</body>
</html>
Folosire comentarii pentru a lăsa părți din cod:
<!DOCTYPE html>
<html>
<body>
<?php
// De asemenea, puteți utiliza comentarii pentru a lăsa părți dintr-o linie de cod
$x = 5 /* + 15 */ + 5;
echo $x;
?>
</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 Tipuri de date

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

PHP Funcții

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

PHP Array

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

PHP Variabile Globale - Superglobale

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

PHP Manipularea formularelor

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

PHP Validare formular

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

PHP Formular Obligatoriu

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

PHP Data și Ora

PHP Data și ora (PHP Date and Time)
Funcția PHP date() este utilizată pentru formatarea unei date și/sau a unei ore.
Funcția PHP date()
Funcția PHP date() formatează un marcaj de timp (timestamp) într-o dată și o oră mai lizibile.
Sintaxă
date(format,timestamp)
format - Obligatoriu. Specifică formatul de timp (timestamp)
timestamp - Opțional. Specifică un marcaj de timp (timestamp). Valoarea implicită (default) o reprezintă data și ora curente
Un marcaj de timp (timestamp) este o succesiune de caractere, care indică data și/sau ora la care a avut loc un anumit eveniment.
Obțineți o dată
Parametrul format necesar al funcției date() specifică modul de formatare al datei (sau orei).
Iată câteva caractere care sunt utilizate frecvent pentru date:
d - Reprezintă ziua lunii (01 - 31)
m - Reprezintă o lună (de la 01 la 12)
Y - Reprezintă un an (în patru cifre)
l (lowercase 'L') - Reprezintă ziua săptămânii
Alte caractere, cum ar fi „/”, „.” sau „-” pot fi de asemenea inserate între caractere pentru a adăuga o formatare suplimentară.
Exemplul de mai jos formatează data de astăzi în trei moduri diferite:
<?php
echo "Astăzi este " . date("Y/m/d") . "<br>";
echo "Astăzi este " . date("Y.m.d") . "<br>";
echo "Astăzi este " . date("Y-m-d") . "<br>";
echo "Astăzi este " . date("l");
?>
Obțineți o oră

Iată câteva caractere care sunt utilizate frecvent pentru perioade:
H - format de 24 de ore al unei ore (de la 00 la 23)
h - format de 12 ore al unei ore cu zerouri în față (de la 01 la 12)
i - Minute cu zerouri în față (00-59)
s - Secunde cu zerouri în față (de la 00 la 59)
a - Lowercase Ante meridian și Post meridian (am sau pm)
Exemplul de mai jos emite ora curentă în formatul specificat:
<?php
echo "Ora este " . date("h:i:sa");
?>
Rețineți că funcția PHP date() va returna data/ora curentă a serverului!
Obțineți-vă fusul orar (timezone)
Dacă timpul de întoarcere din cod nu este corect, cel mai probabil este pentru că serverul dvs. se află într-o altă țară sau este configurat pentru un alt fus orar (timezone).
Deci, dacă aveți nevoie de o oră corectă în funcție de o anumită locație, puteți seta fusul orar (timezone) pe care doriți să îl utilizați.
Exemplul de mai jos stabilește fusul orar (timezone) pe „America/New_York”, apoi emite ora curentă în formatul specificat:
<?php
date_default_timezone_set("America/New_York");
echo "Este ora " . date("h:i:sa");
?>
Creați o dată cu mktime()
Parametrul opțional timestamp din funcția date() specifică un marcaj de timp (timestamp). Dacă este omisă, vor fi utilizate data și ora curentă (ca în exemplele de mai sus).
Funcția PHP mktime() întoarce marcajul de timp (timestamp) Unix pentru o dată. Marcajul de timp Unix (timestamp) conține numărul de secunde între Unix Epoch (1 ianuarie 1970 00:00:00 GMT) și ora specificată.
Sintaxă
mktime(hour, minute, second, month, day, year)
Exemplul de mai jos creează o dată și o oră cu funcția date() dintr-un număr de parametri în funcția mktime():
<?php
$d=mktime(11, 14, 54, 8, 12, 2014);
echo "Data creerii este " . date("Y-m-d h:i:sa", $d);
?>
Creați o dată dintr-un șir (string) cu strtotime()
Funcția PHP strtotime() este utilizată pentru a converti un șir de date (date string) care poate fi citit de om într-un marcaj de timp (timestamp) Unix (numărul de secunde de la 1 ianuarie 1970, 00:00:00 GMT).
Sintaxă
strtotime(time, now)
Exemplul de mai jos creează o dată și o oră din funcția strtotime():
<?php
$d=strtotime("10:30pm April 15 2014");
echo "Data creerii este " . date("Y-m-d h:i:sa", $d);
?>
PHP este destul de inteligent în ceea ce privește conversia unui șir (string) într-o dată, astfel încât să puteți pune diverse valori:
<?php
$d=strtotime("mâine");
echo date("Y-m-d h:i:sa", $d) . "<br>";
$d=strtotime("sâmbăta viitoare");
echo date("Y-m-d h:i:sa", $d) . "<br>";
$d=strtotime("+ 3 luni"");
echo date("Y-m-d h:i:sa", $d) . "<br>";
?>
Cu toate acestea, strtotime() nu este perfect, așa că nu uitați să verificați șirurile (stringurile) pe care le introduceți acolo.
Mai multe exemple de date
Exemplul de mai jos scoate (outputs) datele pentru următoarele șase sâmbete:
<?php
$startdate = strtotime("Sâmbătă");
$enddate = strtotime("+ 6 săptămâni", $startdate);
while ($startdate < $enddate) {
  echo date("M d", $startdate) . "<br>";
  $startdate = strtotime("+ 1 săptămână", $startdate);
}
?>
Exemplul de mai jos afișează numărul de zile până la 4 iulie:
<?php
$d1=strtotime("04 iulie");
$d2=ceil(($d1-time())/60/60/24);
echo "Există " . $d2 ." zile până la 4 iulie.";
?>

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 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 - Clase abstracte

PHP OOP - Clase abstracte
PHP - Care sunt clasele și metodele abstracte?
Clasele și metodele abstracte sunt atunci când clasa parent (părinte) are o metodă numită, dar au nevoie de o clasă (e) child (copil) pentru a finaliza sarcinile.
O clasă abstractă (abstract class) este o clasă care conține cel puțin o metodă abstractă (abstract method). O metodă abstractă (abstract method) este o metodă care este declarată, dar care nu este implementată în cod.
O clasă sau o metodă abstractă (abstract method) este definită de cuvântul cheie (keyword) abstract:
Sintaxă
<?php
abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>
La moștenirea (inheriting) de la o clasă abstractă (abstract class), metoda clasei copil (child class method) trebuie definită cu același nume și cu același modificator access mai puțin restricționat. Deci, dacă metoda abstractă (abstract method) este definită ca protejată, metoda clasei copil (child class method) trebuie definită fie protejată, fie publică, dar nu privată. De asemenea, tipul și numărul de argumente solicitate trebuie să fie aceleași. Cu toate acestea, clasele pentru copii (child classes) pot avea în plus argumente opționale.
Deci, atunci când o clasă de copii (child class) este moștenită (inherited) de la o clasă abstractă (abstract class), avem următoarele reguli:
Metoda clasei copil (child class method) trebuie definită cu același nume și redeclarea metodei abstracte părinte (parent abstract method).
Metoda clasei pentru copii (child class method) trebuie definită cu același  sau cu un mai puțin restricționat modificator access.
Numărul de argumente solicitate trebuie să fie același. Cu toate acestea, clasa pentru copii (child class) poate avea în plus argumente opționale.
<?php
// Clasa părinte (Parent class)
abstract class Car {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function intro() : string;
}
// Clasele copil(Child classes)
class Audi extends Car {
  public function intro() : string {
    return "Alege calitatea germană! Sunt un $this->name!";
  }
}
class Volvo extends Car {
  public function intro() : string {
    return "Mândru că sunt suedez! Sunt un $this->name!";
  }
}
class Citroen extends Car {
  public function intro() : string {
    return "Extravaganța franceză! Sunt un a $this->name!";
  }
}
// Creați obiecte din clasele copil (child classes)
$audi = new audi("Audi");
echo $audi->intro();
echo "<br>";
$volvo = new volvo("Volvo");
echo $volvo->intro();
echo "<br>";
$citroen = new citroen("Citroen");
echo $citroen->intro();
?>
Exemplu explicat
Clasele Audi, Volvo și Citroen sunt moștenite (inherited) de la clasa Auto. Aceasta înseamnă că clasele Audi, Volvo și Citroen pot utiliza proprietatea publică $name precum și metoda publică __construct() din clasa Car din cauza moștenirii (inheritance).
Dar, intro() este o metodă abstractă (abstract method) care ar trebui definită în toate clasele copil (child classes) și ar trebui să returneze un șir (string).
PHP - mai multe exemple de clase abstracte
Să ne uităm la un alt exemplu în care metoda abstractă (abstract method) are un argument:
<?php
abstract class ParentClass {
  // Metoda abstractă (abstract method)cu un argument
  abstract protected function prefixName($name);
}
class ChildClass extends ParentClass {
  public function prefixName($name) {
    if ($name == "Ion Popescu") {
      $prefix = "Mr.";
    } elseif ($name == "Ioana Popescu") {
      $prefix = "Mrs.";
    } else {
      $prefix = "";
    }
    return "{$prefix} {$name}";
  }
}
$class = new ChildClass;
echo $class->prefixName("Ion Popescu");
echo "<br>";
echo $class->prefixName("Ioana Popescu");
?>
<?php
abstract class ParentClass {
  // Metoda abstractă (abstract method) cu un argument
  abstract protected function prefixName($name);
}
class ChildClass extends ParentClass {
  // Clasa copil (child class) poate defini argumente opționale care nu sunt în metoda abstractă a părintelui (parent's abstract method)
  public function prefixName($name, $separator = ".", $greet = "Dear") {
    if ($name == "Ion Popescu") {
      $prefix = "Mr";
    } elseif ($name == "Ioana Popescu") {
      $prefix = "Mrs";
    } else {
      $prefix = "";
    }
    return "{$greet} {$prefix}{$separator} {$name}";
  }
}
$class = new ChildClass;
echo $class->prefixName("Ion Popescu");
echo "<br>";
echo $class->prefixName("Ioana Popescu");
?>

PHP OOP - Metode statice

PHP OOP - Metode statice
PHP - Metode statice
Metodele statice (static methods) pot fi apelate direct - fără a crea o instanță a unei clase.
Metodele statice (static methods) sunt declarate cu ajutorul cuvântului cheie static (static keyword):
Sintaxă
<?php
class ClassName {
  public static function staticMethod() {
    echo "Hello World!";
  }
}
?>
Pentru a accesa o metodă statică (static method), folosiți numele clasei (class name), dublul punct (::) și numele metodei (method name):
Sintaxă
ClassName::staticMethod();
<?php
class greeting {
  public static function welcome() {
    echo "Hello World!";
  }
}
// Apelare metoda statică (static method)
greeting::welcome();
?>
Exemplu explicat
Aici, declarăm o metodă statică (static method): welcome(). Apoi, apelăm metodă statică (static method) folosind numele clasei (class name), dublul punct (::) și numele metodei (method name) (fără a crea mai întâi o clasă).
PHP - Mai multe despre metodele statice
O clasă poate avea atât metode statice, cât și nestatice (static and non-static methods). O metodă statică (static method) poate fi accesată dintr-o metodă din aceeași clasă folosind cuvântul cheie self (self keyword) și dublul punct (::):
<?php
class greeting {
  public static function welcome() {
    echo "Hello World!";
  }
  public function __construct() {
    self::welcome();
  }
}
new greeting();
?>
Metodele statice (static methods) pot fi, de asemenea, apelate la metode din alte clase. Pentru a face acest lucru, metoda statică (static method)  ar trebui să fie publică:
<?php
class greeting {
  public static function welcome() {
    echo "Hello World!";
  }
}
class SomeOtherClass {
  public function message() {
    greeting::welcome();
  }
}
?>
Pentru a apela o metodă statică (static method) dintr-o clasă copil (child class), utilizați cuvântul cheie părinte (parent keyword) din cadrul clasei copil (child class). Aici, metoda statică (static method) poate fi publică sau protejată.
<?php
class domain {
  protected static function getWebsiteName() {
    return "lectii-virtuale.ro";
  }
}
class domainlv extends domain {
  public $websiteName;
  public function __construct() {
    $this->websiteName = parent::getWebsiteName();
  }
}
$domainlv = new domainlv;
echo $domainlv -> websiteName;
?>

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

Acizi

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

Baze

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

Săruri

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

Hidrogenul

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

Apa

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

Grupa 18 sau grupa a VIII-a principală

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

 

Grupa 17 sau grupa a VII-a principală

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

Grupa 15 sau grupa a V-a principală

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

Grupa 14 sau grupa a IV-a principală

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

Grupa 13 sau grupa a III-a principală

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

Grupa 2 sau grupa a II-a principală

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

Grupa 4 sau grupa a IV-a secundară

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

Grupa 5 sau grupa a V-a secundară

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

Grupa 7 sau grupa a VII-a secundară

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

Grupa 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

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