og brukeren vil ikke se hva som sendes dersom han ikke
inspiserer kildekoden til vevsiden.
Sesjoner
En anvendelse av skjulte felt er i sesjoner, eller dialoger mellom
klient og tjener. Den protokollen som brukes, HTTP, er
tilstandsløs. Det vil si at det finnes ingen hukommelse
som husker fra en henvendelse til en annen.
Vi må altså på en eller annen måte etablere en mekanisme som
husker.
Det er flere måter å ordne dette på. En måte er å bruke cookies,
en annen er å bruke HTML5 objektet localstorage, se
modulen Skriv og husk.
Eksempelet nedenfor illustrerer hvordan et skjult felt
kan brukes som hukommelse i en sesjon.
Denne mekanismen med skjulte felt kan selvsagt kombineres med
data som lagres i filer på tjeneren. Det skjulte feltet
kan f.eks. identifisere en fil som akkumulerer data fra en sesjon.
Skriptet som kjører på serveren:
_scriptsequence.py
#! /usr/bin/python
# -*- coding: cp1252 -*-
import cgi
"""
Demoscript for module Form - hidden in
http://www.it.hiof.no/~borres/ml
Demonstrating hidden input
B Stenseth, february 2005
"""
# skeleton HTML
HTMLPage="""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>forms-demo</title>
</head>
<body>
<h1>Dialog med tjeneren</h1>
<p>Dette er melding nr: %s, og dette er mottatt tilsammen:</p>
<p>
%s
</p>
<form action="http://www.ia.hiof.no/~borres/cgi-bin/forms/scriptsequence.py" method="post">
<input type="hidden" name="nummer" value="%s"/>
<input type="hidden" name="sentence" value="%s"/>
<input type="text" name="word" size="20"/>
<input type="submit" value="Send igjen"/>
</form>
<p>inspiser kildekoden</p>
<p><a href="javascript:history.go(-%s)">helt tilbake</a></p>
</body>
</html>"""
#------------------------------------
form=cgi.FieldStorage()
print 'Content-type: text/html\n'
counter='0'
sentence=''
word=''
if form.has_key('nummer'):
counter=str(int(form['nummer'].value)+1)
if form.has_key('word'):
word=form['word'].value
sentence=word
if form.has_key('sentence'):
sentence=form['sentence'].value+' '+word
print HTMLPage%(counter,sentence,counter,sentence,str(int(counter)+1))
Pakke og sende
Vi kan bruke et skjult felt til å sende data vi plukker opp hvor som helst på en vevside.
Nedenfor bruker vi en liste utenfor form-elementet som har egenskapen contenteditable.
Vi bruker altså denne lista som et slags inputfelt og pakker innholdet i et skjult felt i formen når
vi sender.