Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Procesarea datelor din formulare

html


Procesarea datelor din formulare

1. Metode de transmitere a formularului

Valorile completate īn cadrul unui formular pot fi transmise īnspre server pe mai multe cai, metodele de baza fiind GET sau POST, dar pot fi utilizate si posibilitatile oferite de elementul ISINDEX. Fiecare metoda trateaz&# 616d33g 259; intrarile īntr-un mod aparte, avīnd īn comun doar variabilele de mediu.



<ISINDEX> este un tag vid de un tip mai special. Includerea lui īn header s-a facut initial (īnainte de existenta formularelor) pentru ca acesta sa activeze un cīmp text īn bara de butoane sau īn fereastra navigatorului. Vizitatorul putea tasta īn acel cīmp sirul de caractere dorit si, apasīnd RETURN, trimitea datele serverului. Este o modalitate de a implementa interactiunea īnainte de existenta formularelor.

Metoda se alege īn functie de aplicatie. GET poate fi folosit īn cazul cīnd informatia transmisa este scurta (de exemplu un cuvīnt cheie si tipul acestuia). Daca formularul lucreaza cu mai multe cīmpuri de date, variabilele de mediu pot fi trunchiate, dar acest defect se poate elimina prin apelul metodei POST.

Metoda folosita de protocolul HTTP pentru a trimite datele la server este stabilita de atributul METHOD al elementului FORM, atribut ce poate lua doua valori:

get Cu metoda "get" a protocolului HTTP, setul de date al formularului este adaugat la adresa URI specificata de atributul ACTION, folosind semnul īntrebarii ("?") ca separator. Noua adresa URI este trimisa astfel la agentul (programul) care o proceseaza.

post Cu metoda "post" a protocolului HTTP, setul de date al formularului este inclus īn corpul formularului si transmis agentului (programului) care-l proceseaza.

Metoda "get" trebuie folosita cīnd formularul este idempotent, adica nu cauzeaza alte efecte laterale. Multe cautari īn bazele de date nu au efecte laterale (secundare, ascunse) vizibile si reprezinta aplicatii ideale pentru aceasta metoda. Īn plus datele din setul de date al formularului trebuie sa fie obligatoriu, īn exclusivitate, caractere ASCII.

Daca, īnsa, serviciul asociat cu procesarea formularului are efecte laterale (side-effects), ca de exemplu cazul īn care formularul modifica baza de date sau reprezinta o subscriere la un serviciu, se va folosi metoda "post". Aceasta ofera si posibilitatea de a trimite date din īntreg setul de caractere (Unicode), prin specificarea atributului enctype="multipart/form-data".

2. Controalele de succes (successful controls) ale unui formular

Un control de succes este acel control al unui formular "valid" pentru a fi trimis (la Submit). Fiecare astfel de control are numele sau ascociat, īntr-o pereche, cu valoarea sa curenta. Aceasta pereche face parte din setul de date al formularului. Un control de succes trebuie sa fie definit īntr-un element FORM si trebuie sa aiba un nume. Nu toate controalele unui formular sīnt de succes. Astfel:

Controalele care sīnt dezactivate/inactive (disable) nu pot fi de succes

Daca un formular contine mai mult de un buton Submit, numai acela care este activat (apasat) este de succes

Toate casutele de marcare (checkbox-urile) setate la on (activate), si numai ele, sīnt de succes

Dintre butoanele radio care au aceeasi valoare a atributului NAME numai cel care activ/setat (pe "on") poate fi de succes.

Pentru meniuri (liste de selectie), numele controlului este oferit de un element SELECT iar valorile sīnt date de elementele OPTION. Numai optiunile selectate sīnt de succes.

Valoarea curenta a unui element de selectare a unui fisier este o lista de unul sau mai multe nume. La transmiterea unui formular, continutul fiecarui fisier este transmis cu restul datelor din formular. Continutul fisierului este "īmpachetat" conform tipului continutului formularului (content-type).

Valoarea curenta a unui obiect este determinata de implementarea specifica a acelui obiect.

Daca un control nu are o valoare curenta cīnd formularul este transmis, browserul nu este obligat sa īl trateze ca pe un control de succes. Īn plus, nu vor fi considerate controale de succes nici:

Butoanele Reset

Elementele OBJECT care au atributul DECLARE setat.

Controalele ascunse (hidden) care chiar daca nu sīnt afisate de browsere (nu sīnt vizibile) pot fi controale de succes.

Exemplu:

<FORM action="..." method="post">

<P>

<INPUT type="password" style="display:none"

name="invisible-password" value="mypassword">

</P>

</FORM>

va crea un control de succes pentru elementul parola, adica o pereche din numele "invisible-password" si valoarea "mypassword".

3. Procesarea datelor unui formular

Cīnd utilizatorul trimite un formular (prin activarea butonului Submit), browserul sau realizeaza urmatorii pasi (urmatoarele actiuni):

Pasul 1: Identificarea controalelor de succes (successful controls)

Pasul 2: Crearea unui set de date asociat formularului

Un set de date asociat unui formular este o secventa de perechi nume-control/valoare-curenta construita din controale de succes.

Pasul 3: Codificarea setului de date

Setul de date creat la pasul anterior este codificat īn conformitate cu tipul continutului (content type) specificat de atributul ENCTYPE al elementului FORM.

Pasul 4: Transmiterea setului de date codificat

Īn final setul de date astfel codificat este trimis de browserul client agentului de prelucrare (programului) desemnat de atributul ACTION, folosind protocolul specificat de atributul METHOD.

Aceasta specificare nu acopera toate metodele valide de trimitere sau tipurile de continut ce pot fi folosite cu formularele. Totusi, browserele compatibile HTML 4.0 trebuie sa suporte conventiile stabilite īn urmatoarele cazuri:

Daca metoda este "get" si actiunea (atributul ACTION) este o adresa (URI) HTTP, browserul ia valoarea atributului ACTION, adauga un "?" la ea, iar apoi adauga setul de date asociat cu formularul, stabilind tipul continutului (content type) la "application/x-www-form-urlencoded". Browserul urmeaza apoi noua legatura astfel creata. Īn acest scenariu, datele formularului sīnt restrictionate la codurile ASCII.

Daca metoda este "post" si actiunea (atributul ACTION) este o adresa (URI) HTTP, browserul va genera o tranzactie HTTP "post" folosind valoarea atributului ACTION si un mesaj creat īn conformitate cu tipul continutului (content type) specificat de atributul ENCTYPE.

Pentru orice alta valoare a atributelor ACTION si METHOD comportamentul este nespecificat. Browserele trebuie sa afiseze raspunsul generat de tranzactiile HTTP "get" si "post".

4. Tipurile posibile de continut (content-type) pentru un formular

Atributul ENCTYPE al elementului FORM specifica tipul continutului folosit pentru a codifica setul de date asociat formularului īn momentul transmiterii catre server. Browserele utilizatorilor trebuie sa suporte tipurile indicate īn cele ce urmeza. Comprtamentul pentru alte tipuri este nespecificat:

application/x-www-form-urlencoded

Acesta este tipul implicit. Formularele transmise cu acest tip de continut trebuie codificate dupa cum urmeaza:

Numele controalelor si valorile sīnt "escaped". Caracterele blanc (spatiu) sīnt īnlocuite de , iar caracterele rezervate sīnt si ele "escaped": caracterele non-alphanumeric sīnt īnlocuite cu `%HH', (semnul procent si doua cifre hexazecimale reprezentīnd codul ASCII al caracterului). Sfīrsitul de linie (line break) este reprezentat ca o pereche "CR LF" (adica `%0D%0A').

Perechile nume/valoare pentru controale apar īn ordinea din document. Numele este separat de valoare prin semnul egal si fiecare pereche este separata de celelalte prin semnul`&'.

Tipul de continut "application/x-www-form-urlencoded" este ineficient pentr a trimite cantitati mari de date binare sau texte continīnd caractere non-ASCII. Tipul de continut "multipart/form-data" va fi folosit cīnd se trimit formulare ce contin fisiere, date non-ASCII si date binare.

multipart/form-data

Este tipul folosit cīnd continutul setului de date este alcatuit din mai multe feluri de (seturi de) date. Se supune regulilor de la toate sirurile de date (stream-urile) de tip multipart MIME. Un stfel de mesaj contine o serie de parti, fiecare reprezentīnd un control de succes. Partile sīnt trimise agentului care le proceseaza īn ordinea īn care apar īn document. La fel ca la orice tip multipart MIME, fiecare parte are un header optional "Content-Type" care implicit are valoarea "text/plain" si care este īnsotit de un parametru "charset". Fiecare parte trebuie sa contina:

Un header tip "Content-Disposition" a carui valoare sa fie "form-data".

Un atribut NAME care specifica numele controlului corespondent. Numele controalelor care sīnt codificate īntr-un set de caractere non-ASCII pot fi modificate.

Astfel, de exemplu, pentru controlul cu numele "mycontrol" partea corespunzatoare lui va fi specificata astfel: Content-Disposition: form-data; name="mycontrol"

Ca la toate transmiterile MIME, pentru a separa liniile de date se foloseste "CR LF" (`%0D%0A').

Daca se trimite un fisier (continutul lui) acesta trebuie sa fie identificat obligatoriu de tipul continutului (de exemplu"application/octet-stream"). Daca se trimit mai multe (ca rezultat al unei sigure selectii din formular), ele trebuie trimise ca "multipart/mixed", īnauntrul lui "multipart/form-data". Fiecare fisier trebuie trimis cu un nume, specificat cu parameterul "filename" al headerului 'Content-Disposition: form-data'. Daca acesta nu este codificat ASCII el trebuie fie aproximat fie codificat.

Exemplu:

Acest exemplu ilustraza codificarea "multipart/form-data". Presupunem ca avem urmatorul formular:

<FORM action=https://server.dom/cgi/handle enctype="multipart/form-data"

method="post">

<P>

Numele Dvs? <INPUT type="text" name="submit-name"><BR>

Fisierele pe care le trimiteti? <INPUT type="file" name="files"><BR>

<INPUT type="submit" value="Send"> <INPUT type="reset">

</FORM>

Daca utilizatorul introduce "Larry" īn controlul de tip text si selecteaza "file1.txt", browserul lui va trebui sa trimita urmatoarele date la server:

Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x

Content-Disposition: form-data; name="submit-name"

Larry

--AaB03x

Content-Disposition: form-data; name="files"; filename="file1.txt"

Content-Type: text/plain

... contents of file1.txt ...

--AaB03x--

Daca utilizatorul selecteaza al doilea fisier (o imagine), cu numele "file2.gif", browserul va trebui sa contruiasca partile componente ale tranzactiei dupa cum urmeaza:

Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x

Content-Disposition: form-data; name="submit-name"

Larry

--AaB03x

Content-Disposition: form-data; name="files"

Content-Type: multipart/mixed; boundary=BbC04y

--BbC04y

Content-Disposition: attachment; filename="file1.txt"

Content-Type: text/plain

... contents of file1.txt ...

--BbC04y

Content-Disposition: attachment; filename="file2.gif"

Content-Type: image/gif

Content-Transfer-Encoding: binary

...contents of file2.gif...

--BbC04y--

--AaB03x-


Document Info


Accesari: 1958
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )