Formulare
Formularele sunt elementele prin intermediul carora utilizatorii trimit date catre server. Formularele sunt intalnite in orice aplicatie web, cele mai uzuale sunt paginile de login, contact sau inregistrare.
Un formular trebuie sa aiba specificate 2 atribute: "action" si "method". Action reprezinta calea catre fisierul ce va prelucra requestul clientului (de regula un fisier PHP). Acest atribut poate fi gol, specificand ca prelucrarile vor fi facute de acelasi script ce afiseaza formularul (fisierul curent). Method specifica metoda de acces.
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 se clasifica si formularele: 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. Aceasta metoda a fost proiectata pentru a transmite pagina de la server la client, desi se pot transmite mici bucati de informatii si in sens invers (de la client la server) odata cu cererea pentru o pagina. Aceste informatii aditionale (date introduse de utilizatori) sunt adaugate la finalul URL-ului sub forma "?parametru=valoare".
Asadar GET este standardul pentru a "cere" informatii de la server (in engleza "get data"). Prin urmare toate scrierea unui URL in bara de adrese a browserului sau accesarea unui link sunt request-uri de tip GET.
- 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.
Pentru a face un request POST este necesara folosirea unui formular.
Formulare GET
Acest tip de formulare permite utilizatorilor sa transmita informatii aditionale atunci cand cer o pagina web. Actiunea unui formular GET poate fi usor reporodusa 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.
Aplicatie: sa se preia numele utilizatorului (printr-un formular) si sa se afiseze pe pagina.
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:
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).
Formulare de tip 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).
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' ].
Aplicatie: sa se preia numele utilizatorului (printr-un formular) si un text foarte lung. Sa se afiseze pe pagina numele si lungimea textului.
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:
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.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
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.
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
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!
Ciudat....acum merge codul care l-am postat mai devreme :-??
Adauga un comentariu la aceasta sectiune.
pace voua!
Adauga un comentariu la aceasta sectiune.