II. Notiuni de baza13. Formulare

Moderatori: Moderators, Founder

Mesaj

Avatar utilizator
CEO
Posts
3802
Formulare

Formularele sunt elementele prin intermediul carora utilizatorii trimit date catre server. Pe o pagina web pot fi introduse diferite tipuri de informatii (parole, comentarii, mesaje, etc). Toate aceste date sunt transmise catre servere prin intermediul formularelor (in engleza "form").

Odata transmise, datele pot fi prelucrare folosind PHP. Astfel, ele pot fi salvate intr-o baza de date, in fisiere, trimise prin email, sau doar afisate inapoi pe o pagina. In cele ce urmeaza vor fi prezentate elemente de baza ale folosirii formularelor in PHP. Ca o nota, formularele sunt intalnite in orice aplicatie web (cele mai uzuale sunt poate paginile de login, contact sau inregistrare). Cert este ca sunt esentiale in folosirea internetului si este foarte important pentru un programator web sa stie sa foloseasca form-uri in PHP.

Pe scurt, pentru a putea fi introduse date pe o pagina web trebuie sa existe un formular. Acesta se defineste in HTML prin tag-ul form. Un form trebuie sa aiba specificate obligatoriu 2 atribute: "action" si "method".

...
Atributul action contine locatia unde vor fi transmise datele, in esenta numele fisierului de pe server ce va prelucra requestul (de regula un fisier PHP). Acest atribut poate fi gol, specificand ca datele vor fi transmise catre acelasi script ce afiseaza formularul (fisierul curent). Atributul method specifica metoda de acces, dupa cum este descrisa mai jos.

Formularele sunt strans legate de conceptul de "Metoda de acces" (Request Method). De fapt, in functie de modul in care se face cererea catre server, exista doua tipuri de formuri: formulare GET si POST.

Request Methods: GET, POST si altele

Metodele de acces reprezinta modul in care cerintele pentru o pagina web si alte informatii aferente sunt transmise de la browser la serverul web. Exista 8 metode definite, in schimb doar 2 dintre ele sunt cel mai des folosite in dezvoltarea paginilor web. Mai multe detalii pot fi citite pe pagina de Wikipedia.

GET
Este cea mai uzuala metoda, folosita implicit de browsere pentru a trimite cereri catre servere. Majoritatea paginilor pe care le vizualizam pe internet sunt obtinute in urma unei cereri GET. De exemplu, scrierea unui URL in bara de adrese a browserului sau accesarea unui link, sau a unei imagini, toate sunt request-uri de tip GET.

Aceasta metoda este utilizata, asadar, pentru a "cere" o pagina de la server (in engleza "get data"). Totusi, odata cu cererea se pot transmite si mici bucati de informatii catre server. Aceste informatii transmise la momentul cererii pot fi introduse de utilizatori (intr-un form) si sunt adaugate la finalul URL-ului sub forma "pagina.php?parametru=valoare".

POST
Opus metodei GET, POST este folosita pentru a transmite informatii catre server (in engleza "post data"). Spre deosebire de GET care permite doar o cantitate limitata de date sa fie transmisa de la client (browser) la serverul web, POST dispune de limite mai generoase, fiind standardul de transmitere a datelor. Astfel, upload-ul unui fisier pe server, salvarea unui post pe blog, etc - toate sunt requesturi de tip POST.
Mai jos sunt descrise cele 2 tipuri de formulare si cum pot fi accesate datele lor in PHP. Apoi, pe pagina urmatoare, GET vs. POST puteti afla diferentele concrete dintre ele si cum puteti determina ce tip de form sa folositi pe paginile voastre.


Formulare GET


Acest tip de formulare permite utilizatorilor sa transmita informatii aditionale atunci cand cer o pagina web.

Exemplu de formular GET cu 3 campuri text.
|_________| |_________| |________| submit

Datele transmise de utilizatori la un request de tip GET sunt disponibile pentru prelucrare in PHP folosind variabila globala $_GET. Fiecare camp al formularului reprezinta o componenta a variabilei $_GET.

if( !empty($_GET) ) { // afisez tot continutul transmis prin formular print_r($_GET); } /* $_GET va avea urmatoarea structura: $_GET = array( "camp1" => "", "camp2" => "", "camp3" => "" ) */


Procesarea formularelor GET

Pentru a exemplifica modul de procesare al formularelor GET in PHP, vom crea o mica aplicatie care preia numele utilizatorului (printr-un formular) si il afiseaza in pagina.


Formularul HTML
Cream un fisier nou care, intr-o prima faza, va contine formularul HTML.

Cod: Selectaţi tot

Nume  ___________ Trimite
Acesta da utilizatorilor posibilitatea sa scrie numele in caseta afisata si sa apese pe butonul "Trimite".


Codul PHP de procesare a formularului
Urmatorul pas este definirea codului care va prelua numele si-l va afisa. Pentru simplificare, secventa de cod PHP se scrie in acelasi fisier ca si codul HTML de mai sus, la sfarsit. Daca s-ar pune intr-un fisier separat, atunci atributul action al formularului ar trebui sa specifice numele acelui fisier.


Pasii procesarii
In acest fisier, unde avem amestecat cod HTML si cod PHP, interpretorul PHP mai intai returneaza codul HTML ca atare (el fiind static) si apoi evalueaza secventa de cod PHP. Daca secventa de cod va afisa ceva, atunci rezultatul afisarii va fi returnat impreuna cu formularul HTML static. O explicatie mai detaliata a pasilor executati in procesarea unui formular gasiti in lectia Exemple de formulare.


Testare formular online
Formularul, asa cum apare in browser, este disponibil mai jos:

Nume:
________
Trimite

Alternativa la formulare GET: parmetrii URL
Se observa ca atunci cand se foloseste metoda GET, toate elementele formularului (care au specificat un nume!) apar in URL-ul paginii urmatoare (dupa submit) sub forma:

pagina.php ? element1=valoare1 & element2=valoare2
Astfel, in cazul aplicatiei noastre, acelasi efect ca si folosirea formularului s-ar obtine daca s-ar accesa direct pagina cu parametrul numele=ceva (click pentru test). Nota: parametrul se numeste numele pentru ca asa l-am numit noi in formular: <input type="text" name="numele" />

Asta confirma faptul ca toate requesturile pe care le facem in mod obisnuit catre un server web sunt de tip GET (de exemplu cand accesam direct in browser www.google.ro, sau cand facem click pe un link - toate sunt cerinte GET catre server) - si ca sunt echivalente cu folosirea unui formular GET.

Asadar, fie ca folosim un formular cu metoda GET, fie ca scriem direct in bara de adrese a browserului, rezultatul este acelasi: un request de tip GET ai carui parametrii ce sunt accesibili in PHP prin vectorul asociativ $_GET.

Dezavantajele metodei GET sunt, printre altele, cantitatea mica de date ce pot fi transmise (de obicei parametrii au valori mici, de cateva caractere) si restrictiile ce se impun valorilor parametrilor (acestia trebuie sa formeze, impreuna cu numele serverului si calea ceruta, un URL valid). Aceste dezavantaje pot fi eliminate folosind formulare POST.

Formulare POST

Un alt tip de request folosit in practica este POST. Acesta permite transferul unei cantitati mult mai mari de date (de ordinul gigaoctetilor), in timp de metoda GET este limitata la cativa octeti. Astfel, prin POST se pot transfera fisiere catre web-servere si se pot transmite texte foarte lungi, fara a ne face griji de formatul datelor transmise (care pot contine caractere speciale, pot fi in format binar).

Exemplu de formular POST cu un camp text si un camp pentru upload de fisier.

|_______| Choose file - No file chosen Submit

Datele transmise de utilizator sunt disponibile in PHP prin intermediul variabilei globale $_POST. Astfel, daca formularul contine 2 campuri numite "camp1" si "fisier1" (ca in exemplul de mai sus), variabila $_POST va avea doua componente ce pot fi accesate prin $_POST['camp1'] si $_POST['fisier1'].

if( !empty($_POST) ) { // afisez tot continutul transmis prin formular print_r($_POST); } /* $_POST va avea urmatoarea structura: $_POST = array( "camp1" => "", "fisier1" => array(...) ) */

Procesarea formularelor POST
Imagine

"; } if( isset( $_POST[ 'textfl' ] ) && !empty( $_POST[ 'textfl' ] ) ) { print "Ai trimis " . strlen( $_POST[ 'textfl' ] ) . " caractere"; } } ?>
Formularul, asa cum apare in browser, este disponibil mai jos:

Imagine

Se observa ca elementele formularului (numele si textfl) nu mai sunt transmise in URL, ci printr-un alt mecanism. Daca pagina este re-afisata (cu Refresh/F5) browserul va afisa o notificare, cerand confirmarea ca datele sa fie retrimise. Acest lucru confirma, totodata, ca pagina a fost afisata in urma unui request de tip POST.
========================
CONTACT : diliulro@yahoo.com
========================
Închis