Invata PHPcu punctsivirgula.ro

C O N T I N U T
Tutorial PHP in limba romana.

Explicatii, exemple si aplicatii in PHP pentru incepatori. Tutorial cu scripturi PHP


Formulare    4 ! 

Formularele sunt elementele prin intermediul carora utilizatorii trimit date catre server. Pe o pagina web pot fi introduse diferite tipul 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". Action reprezinta locatia unde vor fi transmise datele, reprezentata prin numele fisierul 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). 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 cerinta 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.

asdads a spus asdasd - 23.01.2012

asdasdadsad


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 date 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. Actiunea unui formular GET poate fi usor reprodusa specificand URL-ul si parametrii direct in browser (vezi aplicatia de mai jos).

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

Nimic de afisat.


Adauga un comentariu la aceasta sectiune.

 


Aplicatie: sa se preia numele utilizatorului (printr-un formular) si sa se afiseze pe pagina.    0 ! 

Intr-o prima faza fisierul va cuprinde formularul:

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

Urmatorul pas este definirea codului care va prelua numele si-l va afisa. Secventa de cod PHP se scrie in acelasi fisier ca si codul HTML de mai sus. Daca s-ar pune intr-un fisier separat, atunci atributul action al etichetei form ar trebui sa specifice numele acelui fisier.

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

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

Nume: 


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

pagina.php?element1=valoare1&element2=valoare2

Astfel, acelasi efect ca si folosirea formularului s-ar obtine daca s-ar accesa direct pagina cu parametrul

numele=ceva (click pentru test)

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

Nimic de afisat.


Adauga un comentariu la aceasta sectiune.

 


Formulare de tip POST    0 ! 

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

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

Nimic de afisat.


Adauga un comentariu la aceasta sectiune.

 


Aplicatie: sa se preia numele utilizatorului (printr-un formular) si un text foarte lung. Sa se afiseze pe pagina numele si lungimea textului.    5 ! 

Continutul fisierului PHP este redat mai jos

<form id="afiseaza2" action="" 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>
 
<?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/resurse/download.php?file=form-test.php

Sper sa reusesti!

Mihai a spus ciudat - 13.07.2010

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


Adauga un comentariu la aceasta sectiune.