Invata PHP cu punctsivirgula.ro

I. Introducere
II. Notiuni de baza
III. Notiuni avansate
IV. Aplicatii
V. Extra

Formulare    4 ! 

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

<form action="script.php" method="get">
...
</form>

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.

Adrian a spus Aserat - 24.07.2010

pace voua!

deea a spus greseala - 22.11.2011

Greseala in propozitia "Acesta se defineste in HTML prin tag-ul from. " este vorba de tagul FORM, pare banal, dar cine citeste pt prima data n-o sa stie de ce nu ii merge

Alexandru a spus greseala - 23.11.2011

Multumesc Deea, am corectat.

iEmi a spus Greseala gramaticala - 01.08.2013

Pe o pagina web pot fi introduse diferite tipul(tipuri) de informatii! succes!


Adauga un comentariu la aceasta sectiune.

 


Request Methods: GET, POST si altele    0 ! 

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.

Nimic de afisat.


Adauga un comentariu la aceasta sectiune.

 


Formulare GET    0 ! 

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

Exemplu de formular GET cu 3 campuri text.

<form action="" method="get">
 
<input type="text" name="camp1">
<input type="text" name="camp2">
<input type="text" name="camp3">
 
<input type="submit">
 
</form>

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" => ""
)
*/

Nimic de afisat.


Adauga un comentariu la aceasta sectiune.

 


Procesarea formularelor GET    0 ! 

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.

<form id="afiseaza" action="" method="get">
Nume: 
<input type="text" name="numele" />
<input type="submit" value="Trimite" />
</form>
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.

<?php
if( isset( $_GET[ 'numele' ] ) && !empty( $_GET[ 'numele' ] ) ) {
	print "Salut, {$_GET[ 'numele' ]}!";
}
?>

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: 



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.

Nimic de afisat.


Adauga un comentariu la aceasta sectiune.

 


Formulare POST    1 ! 

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.

<form action="" method="post">
 
<input type="text" name="camp1">
<input type="file" name="fisier1">
 
<input type="submit">
 
</form>

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(...)
)
*/
Victor a spus Despre lectie - 05.01.2013

Introduceti exemple


Adauga un comentariu la aceasta sectiune.

 


Procesarea formularelor POST    6 ! 

Pentru a exemplifica modul de procesare al formularelor POST in PHP, vom crea o alta aplicatie care preia numele utilizatorului (printr-un formular) si un text foarte lung si apoi afiseaza pe pagina numele si lungimea textului.

Structura codului si logica de procesare sunt similare ca in exemplul cu formulare GET. Diferenta in acest caz este ca se va folosi variabila $_POST pentru a prelua datele transmise.

Continutul fisierului PHP este redat mai jos.

<form id="afiseaza2" action="" method="post">
 
Nume: <br />
<input type="text" name="numele" /> <br />
 
Text foarte lung: <br />
<textarea name="textfl" rows="3" cols="20"></textarea> <br />
 
<input type="submit" value="Trimite" />
 
</form>
<?php
# mai intai verificam daca a fost trimis formularul
if( isset( $_POST ) && !empty( $_POST )) {
	# da, a fost trimis; verificam fiecare componenta
	if( isset( $_POST[ 'numele' ] ) && !empty( $_POST[ 'numele' ] ) ) {
		print "Salut, {$_POST[ 'numele' ]}!<br />";
	}
	if( isset( $_POST[ 'textfl' ] ) && !empty( $_POST[ 'textfl' ] ) ) {
		print "Ai trimis " . strlen( $_POST[ 'textfl' ] ) . " caractere";
	}
}
?>

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

Nume: 
 
Text foarte lung:
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.
MariusF a spus _Post['nume_variabila'] - 15.12.2009

Foarte interesant mi se pare ca se poate extrage valoarea unui control dupa nume fara a folosi variabilele _POST['nume _variabila'] .
Dar asta numai dupa primul submit. Caut demult o documentatie seriosa..in romana despre form-uri...nu numa generalitati.

2) Cum ai inserat aceste sectiuni auto-expandabile? Cu CSS si javascript? Ai putea sa mi le dai si mie ?

Merci beaucoup

radunegru a spus refresh - 16.04.2010

Faza e ca daca retrimit datele, prin referesh sau back-forward, si am scris ceva intr-o baza de date, se reia procesul aiurea. Cum fac sa evit asta? Mersi.

Mihai a spus alta pagina - 12.07.2010

Scuze daca o sa pun o intrbare cam idioata... Metoda POST merge doar pentru a extrage datele in aceeasi pagina din care s-a facut transmiterea?
Am facut in felul urmator si nu imi iese:

in fisierul index.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<form id="afiseaza2" action="test.php" method="post">
Nume:
<input type="text" name="numele" /> <br />
Text foarte lung:
<textarea name="textfl" rows="3" cols="20"></textarea> <br />
<input type="submit" value="Trimite" />
</form>

</body>
</html>


iar in test.php am inserat:


<?php
# mai intai verificam daca a fost trimis formularul
if( isset( $_POST ) && !empty( $_POST )) {
# da, a fost trimis; verificam fiecare componenta
if( isset( $_POST[ 'numele' ] ) && !empty( $_POST[ 'numele' ] ) ) {
print "Salut, {$_POST[ 'numele' ]}!<br />";
}
if( isset( $_POST[ 'textfl' ] ) && !empty( $_POST[ 'textfl' ] ) ) {
print "Ai trimis " . strlen( $_POST[ 'textfl' ] ) . " caractere";
}
}
?>


Unde am gresit? (nu afiseaza nimic cand apare pagina test.php

Alexandru a spus alta pagina - 12.07.2010

Salut Mihai.

Da, se poate sa fie pagini diferite. Ce ai spus tu, pare sa fie corect si nu stiu de ce nu iti merge. Vezi totusi sa nu ai vreo greseala de sintaxa in test.php (poate ai uiat vreo virgula pe undeva) si verifica sa fie test.php in acelasi folder cu index.html

Am schimbat exemplul de pe site sa foloseasca un fisier separat. Astfel, daca apesi "Trimite" o sa se duca pe form-test.php care functioneaza corect. Poti descarca form-test.php de la locatia asta: http://php.punctsivirgula.ro/public/resurse/download.php?file=exemple/form-test.php

Sper sa reusesti!

Mihai a spus ciudat - 13.07.2010

Ciudat....acum merge codul care l-am postat mai devreme :-??

Bogdan a spus Completare - 08.01.2014

Aici mai mergea la final trecut un cod care sa execute si in cazul in care nu se intalneste conditiile de mai sus(adica nu se completeaza nimic si se apasa butonul.Iata propunerea mea :

<?php
# mai intai verificam daca a fost trimis formularul
if( isset( $_POST ) && !empty( $_POST )) {
# da, a fost trimis; verificam fiecare componenta
if( isset( $_POST[ 'numele' ] ) && !empty( $_POST[ 'numele' ] ) ) {
print "Salut, {$_POST[ 'numele' ]}!<br />";
}
if( isset( $_POST[ 'textfl' ] ) && !empty( $_POST[ 'textfl' ] ) ) {
print "Ai trimis " . strlen( $_POST[ 'textfl' ] ) . " caractere";
}
}
if (empty($_POST['numele'])&& empty($_POST['textfl']))
{
print "<font color='red'>Input name</font>";
print "</br>";
print "<font color='red'>Input some text!</font>";
}
?>


Adauga un comentariu la aceasta sectiune.