TL   TR
 
Till startsida för Björns studiewebb ASP och formulär

Innehåll

Högerpil Formulär med HTML
Högerpil Hämta information
Högerpil Större exempel

Formulär med FP Högerpil

Vänsterpil Tillbaka till ASP
Vänsterpil Till startsida för studiewebb

Denna sida innehåller en beskrivning av hur man skapar formulär med HTML-kod (som t.ex. kan skickas till en ASP-sida) samt hur man hämtar informationen från formulär i ASP-sidor.

Känner du dig osäker på HTML är rekommenderad läsning, innan du går vidare på denna webbsida, "underwebben" HTML som mer ingående beskriver de olika kontrollerna (fälten) som förekommer i HTML.

Formulär på webbsidor kan skapas visuellt med verktyg som Microsoft FrontPage (FP) eller skivas direkt i HTML-kod.


Formulär med HTML-kod

För att skapa ett formulär behövs minst tre saker:

  • FORM-taggen
  • en kontroll
  • och en Submit-knapp.

Dessa detaljer behandlas nedan. Har du bråttom kan du skippa till slutet på detta avsnitt som visar ett exempel med nödvändig kod.

FORM-taggen

FORM-taggen används för att märka upp start och slut på formulär. Attributen i taggen används för att tala om var formulärets innehåll ska skickas samt hur innehållet ska skickas. De två viktigaste attributen i FORM-taggen är

  • METHOD - hur formulär ska skickas: med get eller post (se nedan).
  • ACTION - var formulärets innehåll ska skickas. Detta kan t.ex. vara ett CGI-program, en ASP-sida eller en Java-servlet.

Nedan visas koden för ett enkelt formulär som skickar innehållet till filen MINSIDA.ASP. Kontrollernas och Submit-knappens position har markerats med (HTML-)kommentarer.

<FORM METHOD="post" ACTION="minsida.asp">
  <!-- Kontroller i formulär -->
  <!-- Submit-knapp -->
</FORM>

Metoderna get och post

Ett formulär kan skickas på två olika sätt: med get eller post. Den stora skillnaden är hur innehållet skickas och hur mycket som kan skickas.

Metoden get är den ursprungliga (den gamla) varianten av hur man skickar formulär. Innehållet skickas som en del av URL:en (se exempel nedan) till (t.ex.) ASP-sida som hanterar innehållet i formuläret. Eftersom vi använder URL:en för att skicka innehållet så är mängden data vi kan skicka begränsad (127 till 255 tecken).

http://www.eki.mdh.se/minsida.asp?Namn=Björn&Telefon=3678

Metoden post är den nyare varianten för att skicka formulär. Data i formulär skickas som en del av webbläsarens begäran om webbsidor. Därför syns inte innehållet i URL:en. Det är också den metod som bör användas om man frågar efter ett lösenord i formuläret. Eftersom data skickas i begäran så är inte mängden data heller begränsad.

Observera att lösenordet fortfarande skickas okrypterat även om metoden post används!

Att använda metoden post är alltså ett säkert kort. :-)

Kontroller

Många av de vanliga kontroller som används i t.ex. Visual Basic finns även i HTML:

  • textfält - en- och flerradiga
  • radioknappar
  • kryssrutor
  • knappar
  • list- och kombinationsrutor

Enkla kontroller (<INPUT>)

De flesta av kontrollerna skapas m.h.a. INPUT-taggen (utom flerradiga textrutor och list-/kombinationsrutor). Kontroller som skapas med INPUT-taggen använder attributet TYPE för att tala om vilken typ av kontroll som ska skapas. I tabellen nedan visas attributet och typen av kontroll som skapas.

Typ av kontroll Värde på TYPE Exempel
Textfält "text"
Lösenordsfält "password"
Dolt textfält "hidden" (syns inte :-)
Kryssruta "check"
Radioknapp "radio"
Tryckknapp "button"
Attributet NAME

Gemensamt för de flesta kontroller är att man använder attributet NAME för att ange namnet på kontrollen. Namnet används för att referera till värdet i den mottagande ASP-sidan.

Ett enkelt textfält med namnet "mintext" skulle skapas med följande HTML-kod:

<INPUT TYPE="text" NAME="mintext">

Attributet VALUE

Vill vi ange ett värde när formuläret laddas kan vi använda attributet VALUE. Tex ger följande HTML-kod:

<INPUT TYPE="text" NAME="mintext" SIZE="40"
  VALUE="Text som visas när formulär laddas">

följande utseende:

Flerradiga textfält (<TEXTAREA>)

Flerradiga textfält skiljer sig på en del punkter från de enradiga, bortsett från att fältet har flera rader. :-) Bl.a. så har fältet både en öppnande och avslutande tagg. Och attributen COLS och ROWS används för att ange (ungefärligen) hur många teckens bredd och höjd som textfältet ska visas med.

Exempel på HTML-kod för ett flerradigt textfält visas nedan (observera att allt som skrivs mellan öppnande och avslutande tagg kommer att visas i textfältet - även mellan slag och radbrytningar!)

<TEXTAREA NAME="mintext" COLS="30"
  ROWS="3">Exempel</TEXTAREA>

 

List- och kombinationsrutor (<SELECT> och <OPTION>)

Precis som med textfältet så har list- och kombinationsrutor en öppnande och avslutande tagg. Och för varje alternativ i rutan så används taggen <OPTION>. OPTION-taggens attribut VALUE kan användas för att skicka ett annat värde än det som visas för besökaren.

Nedan visas två exempel på hur man skapar en kombinationsruta i HTML-kod. I det första exemplet visas en kombinationsruta och i det andra exemplet en listruta. För att få en kombinationsruta kan man utelämna attributet SIZE och om man vill ha en listruta istället, så anger man ett värde större än 1 för attributet SIZE (t.ex. SIZE="4").

<SELECT NAME="minlista">
  <OPTION VALUE="1">Alternativ 1</OPTION>
  <OPTION VALUE="2">Alternativ 2</OPTION>
  <OPTION VALUE="3">Alternativ 3</OPTION>
</SELECT>

<SELECT NAME="minlista" SIZE="4">
  <OPTION VALUE="1">Alternativ 1</OPTION>
  <OPTION VALUE="2">Alternativ 2</OPTION>
  <OPTION VALUE="3">Alternativ 3</OPTION>
</SELECT>

Submit-knappen

Submit-knappen är egentligen en "vanlig" kontroll med fördefinerat beteende, d.v.s. att skicka iväg formulärets innehåll till webbservern. Det finns även en knapp till som brukar användas i kombination med Submit-knappen - Reset-knappen. Reset-knappen återställer (tömmer) formuläret till de värden som kontrollerna innehåll när webbsida med formuläret laddades.

Submit-knappen skapas med en INPUT-tagg vars attribut TYPE satts till "submit". Texten som ska visas på knappen anges med attributet VALUE. Nedan visas HTML-koden som behövs för att skapa en Submit-knapp.

<INPUT TYPE="submit" VALUE="Skicka formulär">

[FrontPage-komponenten Spara resultat]

Ett enkelt formulär

HTML-koden som har med formuläret att göra har markerat med fet stil.

<HTML>
<HEAD>
  <TITLE>Ett enkelt formulär</TITLE>
</HEAD>
<BODY>

<H1>Ett enkelt formulär</H1>
<P>Fyll i fälten och klicka på Skicka för att skicka informationen</P>

<FORM METHOD="post" ACTION="registrera.asp">
  <P>Namn:   <INPUT TYPE="text" NAME="namn"></P>
  <P>E-post: <INPUT TYPE="text" NAME="epost"></P>
  <P><INPUT TYPE="Submit" VALUE="Skicka"></P>
</FORM>

</BODY>
</HTML>

Microsoft FrontPage och Visual InterDev

Givetvis går det lite lättare att skapa formulär om man använder verktyg för att redigera webbsidor visuellt. Microsoft FrontPage 2000 och Visual InterDev 6 är två sådana verktyg som är lämpliga då man jobbar med Microsoft teknologier (därmed inte sagt att de är de bästa för utveckling av webbsidor :-).

FrontPage är bäst (av de två) för att utveckla utseendet för webbsidorna, medan Visual InterDev är bättre då man skriver ASP- och JavaScript-kod. För formulär är också FrontPage bäst då så fort man placerar en kontroll på webbsidan så lägger FrontPage till FORM-taggen samt Submit- och Reset-knappar.


| Till början på sida |


Hämta information från formulär

Här beskrivs hur man hämtar informationen från ett formulär som skickats till ASP-sidan. Tyvärr finns (ännu?) inget bra verktyg för att generera kod för att läsa innehållet från ett formulär. Vi måste alltså skriva koden själv.

För att webbserver ska veta att en webbsida innehåller ASP-kod (och kunna tolka den) måste filen med webbsidan ha filändelsen .ASP.

Objektet Request

All information (data?) som skickas från en webbläsare när den (eller snarare besökaren) begär en webbsida placeras i objektet Request. Från detta objekt kan vi sen i vår ASP-kod hämta bl.a. innehållet från formulär. Objektet finns alltid tillgängligt och behöver alltså inte skapas.

Beroende på hur formuläret skickades, get eller post, så finns det två vektorer som innehåller innehållet från formuläret - QueryString respektive Form. För att hämta innehållet i ett formulär som skickats med metoden get så använder vi alltså vektorn QueryString i Request-objektet

Request.QueryString("namn_på_kontroll")

Om vi istället skickar formuläret med metoden post så använder vi vektorn Form

Request.Form("namn_på_kontroll")

Att hantera innehållet från exempelformuläret ovan (Ett enkelt formulär) kan ske med nedanstående kod (eftersom formuläret skickas med metoden post). Här deklareras först två variabler som sedan tilldelas innehållet från textkontrollerna namn och epost.

Dim strNamn, strEpost
strNamn = Request.Form("namn")
strEpost = Request.Form("epost")

Skriva till webbsida

Givetvis är det inte bara intressant att läsa data från ett formulär, utan kommunikation sker ofta år andra hållet med utskrift. För att skriva till den resulterande webbsidan använder vi istället objektet Response, även det alltid tillgängligt. Metoden vi använder är Write() och i nedanstående kod (som fortsätter från den ovan) skriver ut innehållet i variablerna efter lite ledtext.

<%
  Response.Write "Du angav ditt namn som: " & strNamn
  Response.Write " och din e-postadress som: " & strEpost
%>

Eftersom ASP-sidan är så enkel (liksom formuläret) så skulle vi kunna ersätta ovanstående två rader med följande kod.

Du angav ditt namn som: <% =strNamn %> och din e-postadress som: <% =strEpost %>

Det sista alternativet är ibland att föredra då det gör det lättare att läsa HTML-koden (liksom ASP-koden), speciellt om mängden "utskrifter" år små. Man använder ASP-koden för att hantera logiken och HTML-koden för presentation. 

Egentligen så bör man använda komponenter för att hantera det mesta av logiken samt ASP endast för att anropa metoder i komponenterna och eventuell utskrift av resultatet från metodanropen. Se ASP och komponenter för mer information.


| Till början på sida |


Ett lite större exempel

I detta exempel använder vi två filer:

  • STORRE1.HTM - innehåller HTML-formuläret
  • STORRE1.ASP - innehåller ASP-koden som hanterar innehållet från formuläret

 

Förklaring till koden i filen STORRE1.HTM

HTML-koden för formuläret är inte mycket mer komplex än den i det enkla exemplet ovan. Men tabellen som används för att styra bredden på textraderna och för att kunna centrar webbsidans innehåll gör att koden ser värre ut än den är. Men koden för tabellen skapas relativt enkelt i t.ex. Microsoft FrontPage.

Formuläret i detta exempel innehåller bl.a. två textrutor och en Submit-knapp. Men här visas även hur man använder radioknappar och textrutor i HTML-formulär (samt hur man hanterar dess innehåll nedan).

Radioknappar

Radioknappar brukar användas i grupper om två eller fler - besökaren kan då endast markera en av radioknapparna. För att gruppera radioknapparna så ger man dem samma värde på INPUT-taggens attribut NAME. Och för att skicka olika värden, beroende på vilken radioknapp som besökaren valde, så använder man attributet VALUE. Attributet CHECKED (utan något värde efter ett likhetstecken!) används för att avgöra vilken radioknapp (om någon) som ska vara markerad när webbsida med formulär laddas.

I detta exempel använder vi två radioknappar för att besökare ska kunna ange om han/hon är en student eller lärare. Radioknappen ges namnet sysselsattning och värdena "studerande" respektive "larare". Observera att svenska tecken har ersatts med bokstäverna a eller o. Efter radioknappen skrivs ledtext för att visa på vilket alternativ som radioknappen avser.

<P>Jag är:
<INPUT TYPE="radio" NAME="sysselsattning"
  VALUE="studerande" CHECKED>
studerande
<INPUT TYPE="radio" NAME="sysselsattning"
  VALUE="larare">
lärare</P> 

Jag är: studerande lärare

Kryssrutor

Kryssrutor brukar, i motsats till radioknappar, kunna anges oberoende av varandra, d.v.s. används för att markera inga eller flera alternativ. Om vi bara anger namnet på kontroller (med attributet NAME) så kommer värdet "on" skickas om besökare markerat kryssrutan. Vill vi skicka något mer intressant värde (än "on") så kan vi använda attributet VALUE. Även här kan vi använda attributet CHECKED för att låta en (eller flera) kryssrutor vara markerade när webbsida laddas.

Observera även att kryssrutans namn (och därmed innehåll) endast skickas om kryssrutan har markerats!

<P>Jag vill ha information om:
  <INPUT TYPE="checkbox" NAME="bocker">läroböcker
  <INPUT TYPE="checkbox" NAME="program">program</P>

Jag vill ha information om: läroböcker program

Fullständiga koden för filen STORRE1.HTM

Koden för HTML-formuläret har markerats med fet stil i koden nedan.

<HTML>
  <HEAD>
    <TITLE>Ett större exempel med formulär</TITLE>
  </HEAD>
  <BODY>

  <!-- Centrera tabell -->
  <DIV ALIGN="center">
  <CENTER>

    <!-- Tabell används för att styra bredd på text och för att kunna
        centrera. Tabellen innehåller endast en rad och en kolumn -->
    <TABLE BORDER="0" WIDTH="600">
      <TR>
        <TD WIDTH="100%">

          <H1>Ett större exempel med formulär</H1>
          <P>I detta exempel visas ett formulär i filen STORRE1.HTM
            och som skickar innehållet till en fil med namnet
            STORRE1.ASP.</P>

          <HR>

          <!-- START: Formulär -->
          <FORM METHOD="post" ACTION="storre1.asp">

            <P>Förnamn<BR>
              <INPUT TYPE="text" NAME="fnamn"></P>

            <P>Efternamn<BR>
              <INPUT TYPE="text" NAME="enamn"></P>

            <P>Jag är:
              <INPUT TYPE="radio" NAME="sysselsattning"
                VALUE="studerande" CHECKED>studerande
              <INPUT TYPE="radio" NAME="sysselsattning"
                VALUE="larare">lärare</P>

            <P>Jag vill ha information om:
              <INPUT TYPE="checkbox" NAME="bocker">läroböcker
              <INPUT TYPE="checkbox" NAME="program">program</P>

            <P><INPUT TYPE="submit" VALUE="Skicka!"></P>

          </FORM>
          <!-- SLUT: Formulär -->

          <HR>

        </TD>
      </TR>
    </TABLE>

  </CENTER>
  </DIV>

  </BODY>
  </HTML>

Förklaring till koden i filen STORRE1.ASP

HTML-koden är i stort sett den samma i denna fil som i den med HTML-formuläret, bortsett från att den inte innehåller ett formulär. ASP-koden har delats upp i två delar där den första delen deklarerar variabler och hämtar innehållet från formuläret. Denna del har placerats innan den öppnande HTML-taggen.

Den andra delen av ASP-koden har placerats i webbsidans kropp (d.v.s. i BODY-taggen) för att utskrift ska kunna ske direkt där den ska användas (med Response.Write).

En viktig sak, som ganska tydligt framkommer i detta exempel, är det flitiga användandet av If-satser i ASP-kod. Innehåll från formulär måste kontrolleras ganska ingående så att det inte genereras några fel i ASP-koden.

Helst av allt så bör man använda JavaScript-kod för att validera formuläret innan formuläret skickas till webbservern och ASP-sidan. Med validering menas att man kontrollerar att alla obligatoriska fält innehåller något, och gärna då giltiga värden. Men JavaScript ligger är utanför ämnet för denna webbsida.

ASP-kod del 1

I första delen av ASP-koden deklareras en variabel blnSkickat som en flagga som används för att avgöra om resten av koden ska exekveras. (Det finns inget skäl att exekvera någon kod om det inte finns något att göra. :-) Genom att kontrollera om egenskapen Count i vektorn Request.Form är större än noll (0) så kan flaggan (variablen blnSkickat) sätts till sant, annars falskt. Flaggan används även i den andra delen av ASP-koden.

If Request.Form.Count > 0 Then
  blnSkickat = True
Else
  blnSkickat = False
End If

Och om något skickats så deklarerar vi variabler för att lagra innehållet i formuläret samt hämtar och tilldelar innehållet till variablerna. Det är ingen skillnad mot det enkla exemplet ovan.

ASP-kod del 2 

Det första vi gör att kontrollera att något skickats genom att använda vår flagga blnSkickat. Efter lite ledtext så skriver vi ut besökarens för- och efternamn. Inte heller detta är något nytt jämfört med det enkla exemplet ovan.

Radioknappar och kryssrutor

Däremot så skiljer sig hanteringen av innehållet i radioknappar och kryssrutor. Som nämnts ovan så kan man (med diverser attribut i INPUT-taggen) styra vad som ska skickas när besökare väljer en radioknapp eller sätter en bock i en kryssruta. I HTML-formuläret har jag valt att skicka beskrivande strängar från radioknapparna men endast värdet "on" om besökare markerar en kryssruta.

Eftersom radioknappen för sysselsättningen "lärare" innehåller svenska tecken (bokstaven ä för att vara exakt) så har jag valt att skickat texten "larare" istället. Därmed måste jag kontrollera om besökarens sysselsättning är studerande (alt. lärare) eller inte och sen skriva ut besökarens sysselsättning. (Det vore bättre att endast skicka en bokstav, d.v.s. "s" och "l", men exemplet visar ju på problemet.)

If strSysselsattning = "studerande" Then
  Response.Write "studerande"
Else
  Response.Write "lärare"
End If

Kryssrutorna skapar lite mer problem, men problemet är främst relaterat till att utskriften ska se bra ut (d.v.s. om texten "och" ska skrivas ut emellan "intressena"). Hade vi bara valt att spara i en databas så hade vi endast behövt kontrollerat om kryssrutan var vald eller inte för att skriva sant eller falskt till fältet i databasen. Men eftersom jag valt att göra en "snygg" utskrift så måste jag kontrollera om kryssrutorna är markerade, för att i så fall skriva ut vad besökaren är intresserad av.

Om besökaren är intresserad av första alternativet (läroböcker) så sätter jag en flagga så att jag i nästa If-sats kan avgöra om texten "och" ska skrivas ut mellan "intressena".

If strBocker = "on" Then  
  Response.Write "läroböcker"
  blnBocker = True
End If

If strProgram = "on" Then
  If blnBocker then
    Response.Write " och "
  End If

  Response.Write "program"
End If

Detta större, men relativt enkla, exempel slutat med ca 100 rader med HTML- och ASP-kod (inklusive tomma rader och kommentarer!). Ska sanningen fram så bidrar "designen" (tabellen) för webbsidan med ca 25 rader av koden. Men 75 rader för att hantera och skriva ut 5 kontroller är kanske inte så "produktivt"... 

Fullständig kod för filen STORRE1.ASP 

ASP-koden har markerats med fet stil (utom kommentarer) 

<%
    Option Explicit

      'Deklarera variabler
    Dim blnSkickat

      'Om formulär skickats och är ifyllt - sätt flagga till sant
    If Request.Form.Count > 0 Then
      blnSkickat = True
    Else  '... annars sätt till falskt
      blnSkickat = False
    End If

      'Dekl. endast variabler och hämta värden om formulär skickats
    If blnSkickat Then

        'Deklarera variabler för innehåll i formulär 
      Dim strFnamn, strEnamn, strSysselsattning, strBocker, strProgram
      Dim blnBocker

        'Hämta innehållet i formuläret
      strFnamn = Request.Form("fnamn")
      strEnamn = Request.Form("enamn")
      strSysselsattning = Request.Form("sysselsattning")
      strBocker = Request.Form("bocker")
      strProgram = Request.Form("program")

    End If
  %>
<HTML>
  <HEAD>
    <TITLE>Ett större exempel med formulär</TITLE>
  </HEAD>
  <BODY>

  <!-- Centrera tabell -->
  <DIV ALIGN="center">
  <CENTER>

    <!-- Tabell används för att styra bredd på text och för att kunna
        centrera. Tabellen innehåller endast en rad och en kolumn -->
    <TABLE BORDER="0" WIDTH="600">
      <TR>
        <TD WIDTH="100%">

          <H1>Ett större exempel med formulär</H1>
          <P>I denna fil, STORRE1.ASP, läses innehållet från
            formuläret i filen STORRE1.HTM och visas nedan..</P>

          <HR>
<%
      'Om formulär skickats - visa innehållet i formuläret
    If blnSkickat Then

        'Skriv ut lite ledtext
      Response.Write "<P>Du uppgav följande information om dig "
      Response.Write "själv:</P>"

        '***********************************
        '*** Skriv ut för- och efternamn ***
      Response.Write "<P><B>Förnamn:</B> " & strFnamn & "</P>"
      Response.Write "<P><B>Efternamn:</B> " & strEnamn & "</P>"

        '***********************************
        '*** Skriv ut sysselsättning     ***
        'Påbörja HTML-stycke och skriv ut ledtext för sysselsättning
      Response.Write "<P><B>Du är </B>"

        'Om sysselsättning är stud. - skriv ut texten "studerande"...
      If strSysselsattning = "studerande" Then
        Response.Write "studerande"
      Else  '... annars texten "lärare"
        Response.Write "lärare"
      End If

        'Avsluta HTML-stycke
      Response.Write "</P>"

        '***********************************
        '*** Skriv ut "intressen"        ***
        'Påbörja HTML-stycke och skriv ut ledtext för intresse
      Response.Write "<P><B>Du vill ha information om:</B> "

        'Om intresserad av läroböcker - skriv ut texten "läroböcker"
      If strBocker = "on" Then
        Response.Write "läroböcker"

          'Sätt flagga att intresserad av böcker
        blnBocker = True
      End If

        'Om intresserad av program - skriv ut texten "program"
      If strProgram = "on" Then

          'Om även intresserad av böcker skriv ut texten " och "
        If blnBocker then
          Response.Write " och "
        End If

        Response.Write "program"

      End If
        'Avsluta HTML-stycke
      Response.Write ".</P>"

        '***********************************
    Else   '... annars meddela besökare att fylla i formuläret
      Response.Write "<P>Du måste fylla i formuläret först."
      REsponse.Write " Använd länk nedan.</P>"
    End If
  %>
        <HR>
          <P><A HREF="storre1.htm">Visa formulär</A></P>
          <HR>
      </TD>
      </TR>
    </TABLE>

  </CENTER>
  </DIV>

  </BODY>
  </HTML>
  • Provkör formuläret och den hanterande ASP-koden.

| Till början på sida | Tillbaka till ASP |


Skapad av: Björn G D Persson. Uppdaterad: 2007-01-25.

 
BL   BR