ASP

ASP är en serverteknologi och körs oftast på en IIS-server (Internet Information Server) men även t ex en Apache-server klarar det. Man arbetar främst med VB-script.

Vbscript

Vbscript har ingen klientsupport hos Netscape. Men eftersom vi kör mot servern fungerar det överallt (runat=server).

Scripten infogas med en script-tagg.

Man börjar och slutar ASP-koden med <% kod %>

Kommentar - man börjar en kommentar med '

Radbrytning måste skrivas med _"underscore"

 

Response.write

Används för att skriva till skärmen.

Datatyper

integer - heltal
string - sträng (text)
date - datum
boolean - Sant el falskt
flyttal

Om det inte är heltal måste man använda apostroftecken runt variablen.

Det finns två varianter att deklarera variabler:

Deklarera explicit
- dim min_variabel
- min_variabel=2

Deklarera implicit
- min_variabel=2

<% Option explicit %> Tvingar sig själv att alltid använda explicit. Gör det lättare att hitta ev fel.

OBS! Case-sensitive


Konstanter

Const dblMoms=0.25

Array

En array är som en behållare där man kan lägga flera värden.

Deklarera flera variabler i ett streck i en array. Referera sedan till positionerna:
dim arrskidor
arrskidor=Array("Nalle Puh", "Tiger", "Nasse")

Operatorer

Tilldela arrDagar(0)="Måndag"

<%Dim iVar
iVar=3
iVar=5
%>

<%Dim iVar, iOldVar
iVar=3
iOldVar=iVar
iVar=5
%>

strName="Kalle Johansson"
bolEmail=True
dtBirthday=#14/7# (brädgårdstecken för att servern inte ska tolka det som räknetal.)

Matematiska operatorer

Addera
- iVar = 3 + 5
- iVar = iVar +5

Subtrahera
- iVar = 3-5
- iVar = iVar -5

Multiplicera
- Använd *

Dividera
- Använd /

Konkatenering - sätta ihop

"Hello " & "World"
Använd + eller & vid konkatering

<% Dim iAge
iAge=25
Response.write("Annika är & iAge & " år ung")
%>

 

Kontrollstrukturer

Conditional (if/else/case)

Loop (do/while)

Branching (subrutiner-funktioner)

 

IF - OM så DÅ gör så ANNARS gör så

IF förutsättning
kodblock
END IF

IF strName = "Annika" THEN
response.write "Hej Annika"
END IF

IF strName = "Annika" THEN
response.write "Hej Annika"
ELSE
response.write "Hej Du"
END IF

FOR NEXT

iSum = 0
FOR iCounter = 1 to 10
iSum = iSum + iCounter
response.write "Nummer" & iSum & "
"
NEXT

Tillsammans med ARRAY: arrSkidor(iCounter) För att köra igenom en array: sätt iCounter till 0 to 10 för den ska börja i första positionen.

Subrutiner och funktioner

För att bryta ut kodrutiner som man ofta återkommer till.

Subrutin utför en handling. T ex för att kolla en email-adress.
SUB namn (parameter)
kodblock
END SUB

<%
SUB subHeading (iNumTimes)
Dim iCounter
FOR iCounter = 1 to iNumTimes
response.write "

"
response.write "Ditt namn här
"
response.write "Din site här
"
NEXT
END SUB

iNum Times=4
subHeading iNumTimes
response.write "iNumTimes är " & iNumTimes
%>

Subrutiner ska ligga överst.

Funktion gör beräkningar och retunerar ett värde. Tex momsberäkning.
FUNCTION namn (parameter)
kodblock (förmodligen en slinga, en IF-sats)
END FUNCTION

<% Dim bolLotto
FUNCTION bolVinst (bolLotto)
IF bolLotto = 1 THEN
bolVinst = 1
ELSE
bolVinst = 0
END IF
END FUNCTION

IF bolVinst(1) THEN
response.write "Grattis"
ELSE
response.write "Sorry"
END IF
%>

Inbyggda funktioner

Datumfunktioner:
response. write ...
Date - Returnerar dagens datum
Now - Returnerar datum och tid
Time - Returnerar klockslag
DateDiff - Skillnad mellan två datum. Kan användas för att kolla fakturor - om de inte är betalda vid viss datum. Ex. Datediff("d", #2000-09-02#,#2000-09-10#) Ger resultatet 8.
FormatDateTime - Formaterar datum - om man vill ha ett annat format på datumet. Ex. FormatDateTime(now,2)
Month(Date()) - Returnerar månadens nummer
DatePart("d",#2007-05-31#) - Returnerar del av datum.
Ex. DatePart("d",#2000-07-31#) - returnerar 31 (d står för dag)
DateSerial - Skapar datum av år, månad och dag

Strängfunktioner:
UCase/LCase - Stora/små bokstäver. Kan användas för att bli av med case-sensibility. response.write ucase("kalle")
Trim/LTrim/RTrim - För att kapa en sträng - tar bort blanksteg i slutet/början. Ex. response.write Ltrim(" kalle")
Len - För att räkna hur många tecken som finns i en sträng. T ex för att kolla om antalet siffor i personnr stämmer. Ex. response.write Len("kalle")
InStr - InString: Söker i en sträng efter ord eller mönster. för att kolla vilken position ett tecken står i. Ex. response.write InStr("Annika", "a"). Istället för "Kalle" kan man först deklarera StrName="Kalle" och sedan använda StrName. Kan användas t ex för koll av @-tecken i email-adress. Ex. response.write InStr("glskk.wee.se", "@").

 

FOR - EACH - NEXT

Användbar om man ska loopa genom t ex en collection eller array och inte vet hur många gånger man ska loopa.

Syntax:
FOR EACH variabel IN collection
kommando
NEXT


DO - WHILE

 

Används precis som FOR för att loopa ett bestämt antal gånger, men antalet gånger bestäms av ett villkor.

DO WHILE NOT objRS.EOF - så länge EOF inte är lika med 1

kodblock
LOOP

 

Objekt

Properties (egenskaper) - beskriver ett objekt. T ex färg=gul.

Methods - saker du kan göra med objektet. T ex starta.

Object i VBscript

Response - response.write "Hej"
Request - hämta data från användare. Tex via formulär el andra funktioner.
Application - dela information mellan användare.
Session - håller reda på info om en användare. T ex om man har en webshop och användaren stoppar varor i kundvagnen.
Server - hanterar komponenter på servern där ASP:n ligger.

Response.write

<%response.write(Date)%> DETSAMMA SOM <%=Date%>

 

Response

måste läggas längst upp efter <%option explicit%>

response.buffer - skickar allt på en gång. Om buffer=true så visas ingenting förrän allt är skickat. Därför bra att använda =false.
response.end - avslutar ett script
response.clear - tömmer buffer
response.redirect - skickar användaren vidare

Ex.
<%response.buffer=true %>
response.end
response.redirect "nextpage.htm"

 

Collections

En samling variabler med värden. Används för att lagra data i formen namn/värde, ex form.htm?namn=Patrik&age=31.

Två typer:
-QueryString: används för att hämta värden ur Querystring, skickat från formulär med metoden GET.
-Form: används för att hämta värden skickade från formulär med metoden POST.

Request objektet

Används för att hämta data ur collections, antingen från/om användaren eller ur ett formulär.

input type=text name=namn>
request.querystring("namn")
request.servervariables("HTTP_USER_AGENT")

QueryString

form action="resultat.asp" method="get"
input type=text name=namn>
input type=submit>
form>
response.write request.querystring("namn")

Form

form action="resultat.asp" method="post"
input type=text name=namn>
input type=submit>
form>
response.write request.form("namn")

 

Cookies

Information om användare som lagras på användarens dator en viss tid. Cookies kan t ex vara någon information som användaren lämnar via ett formulär.

Man måste ange en cookies giltighetstid när den skapas. När giltighetstiden passeras tas den automatiskt bort från datorn.

Läsa cookies

Man läser och lagrar cookies genom en speciell cookie-collection.

=request.cookies(cookienamn){(nyckel)}
=request.cookies("Userinfo")("LastVisit")

Lagra cookies

=response.cookies(cookienamn){(nyckel)} = värde
=response.cookies("Userinfo")("LastVisit") = Date()
=response.cookies("Userinfo") = strName

Lagra cookies en längre tid

=response.cookies("Userinfo")("LastVisit") = Date()
=response.cookies("Userinfo").expires = #2010-01-01#

OBS! response.cookies måste ligga innan body>

 

HTTP headers

Information som utbyts mellan servrar

Från browser skickas en förfrågan om en URL + olika slags information (request headers) till IIS:en. IIS:en skickar tillbaka URL:en + information om URL:en (response.headers).

Standard HTTP headers

HTTP_ACCEPT: mimetypes som fungerar med klienten
HTTP_ACCEPT_LANGUAGE: vilket språk browsern förväntar
HTTP_CONNECTION: Koppling mellan klient och server
HTTP_HOST: namnet på klientdatorn
HTTP_USER_AGENT: typ av browser
HTTP_REFERERER: vilken sida kom klienten från
HTTP_COOKIE: cookies som skickats från browsern

=Request.Servervariables("HTTP_USER_AGENT") (=-tecknet är samma som response.write)

För att se vilka headers som finns kan man skriva =Request.Servervariables("ALL_RAW") eller =Request.Servervariables("ALL_HTTP")

Environment variables

HTTP headers innehåller information om klienten, environment variables innehåller information från server-sidan.

URL: den efterfrågade sidans URL
SERVER_NAME: webserverns datornamn
SERVER_SOFTWARE: webserverns programvara

=Request.Servervariables("Server_Software")

 

Databaser

En databas är en samling information. Består ofta av en eller flera tabeller som innehåller informationen.

En tabell består av rad/record/post som består av ett eller flera fält/field. Databasen består av flera tabeller.

Relationsdatabaser beskrivs ofta i relations-sheman som visar relationerna mellan tabellerna. En relation skrivs ofta som 1:många-relation, d v s en post kan vara kopplad till flera poster.

Skapa en tabell

Tala om vilka kolumner vi ska ha och vad de ska heta.

Autonumber: varje gång man lägger till en ny rad räknas värdet upp.

Access databaser

1) Välj: Blank access database - spara.
2) Skapa den första tabellen - välj "Create table in design-view".
3) Döp de olika fälten och välj datatyp och fieldsize (där nere).
Vill man ha ett speciellt format på t ex personnr kan man fylla i input-type. Man kan styra om ett fält måste vara ifyllt.

Ett fält (oftast fält med autonumber, t ex id) måste ha en nyckel för att kunna identifiera raderna som unika.

4) Döp tabellen. Döp den gärna med prefixet tbl.

Hur kopplar man ASP mot databasen?

Objektet ADO - ActiveX Data Object

ADO är en samling objekt som öppnar koppling mot databas. Används när man vill skriva till databasen m m.

Metoden ADO connection - skapar kopplingen

Metoden ADO recordset - hämtar datan

Server-objektet används tillsammans med ADO:
Server.Createobject("ADODB.connection") som skapar dataobjektet

Skapa kopplingen

Man måste först ta reda på:
1) Typ av koppling: ODBC eller DSN-less
2) Typ av databas: Access, SQL-server, Oracle, osv
3) Var databasen finns sparad

ODBC (OpenBase Connectivity) / DSN (Data Source Name)

Ett sätt att göra databas-kopplingen enkel!

Kör man utan ODBC behöver systemadministratören inte lägga in kopplingen.

Koppling steg 1 - bygga bro

Använd connection-objectet:
dim objConn
set objConn=Server.CreateObject("ADODB.Connection") - mitt connection-objekt ska innehålla en ADODB-connection och lagras i min connection-variabel

objConn.Connectionstring="DRIVER="{Microsoft Access Driver (*.mdb)};" & "DBQ=c:\...\xxx.mdb"
- ange vilken typ av databas som ska användas och var den finns
objConn.open - öppna bron

Koppling steg 2 - åka på bron

Använd recordset-objektet
dim objRS
set objRS=Server.CreateObjekt("ADODB.recordset") - talar om vad recordset objRS ska innehålla
objRS.open "tabellnamn/SQL-fråga el dyl", objConn (vilken koppling/bro som ska användas) - öppnar recordset och hämtar data

Recordset

objRS.open öppnar recordset och hämtar data.

Sätt att hålla reda på var man är i räkningen:
BOF - Beginning of File: variabel av typen boolean (sant el falskt). Börjar på 1 (sant).
EOF - End of File: variabel av typen boolean (sant el falskt). Börjar i slutet (falskt).

Recordset innehåller all data men man kan bara komma åt en rad åt gången
För att titta på kolumnen "Customer": objRS("Customer") - returnerar innehållet i första raden i kolumnen "Customer"

För att komma åt de andra raderna i kolumnen använder man en loop:
objRS.MoveNext - talar om för recordset att jag vill flytta till nästa rad.
objRS("Customer) - returnerar datan i nästa rad i kolumnen "Customer".

objRS.MovePrevious - talar om för recordset att jag vill flytta till föregående rad.

IF EOF=false - så länge jag inte läst sista raden är det falskt!

Stäng databaskopplingen!

Koppling till databas tar mycket resurser från servern, därför är det viktigt att koppla ner när databasen inte behövs längre.

objRS.Close
set objRS=Nothing
objConn.close
set objRS=Nothing
OBS! kopplingarna måste stängas i rätt ordning - först recordset, sedan connection


ODBC

Standardiserat program som Microsoft tagit fram. ODBC-kompatibla databaser, t ex Oracle, Access.

ODBC-källan lägger man upp på den maskin som har databasen. Man hittar den i Kontrollpanelen (32-bit ODBC).

System DSN - Add - Välj drivrutin - Data Source Name (DSN) - Döp kopplingen, Select - Leta upp din databas.

Skillnader i koden

Dim objConn
set objConn=Server.CreateObject("ADODB.Connection")
objConn.Connectionstring="DSN=dbKurs" dbKurs är min koppling som jag skapat genom Kontrollpanelen
objConn.open

DSN-less connectionstring:
objConn.Connectionstring="DRIVER={Microsoft Access Driver (*.mdb)};" & "DBQ=c:\...\xxx.mdb"

forts. Recordset

objRS.Open källa, koppling
- jmf objRS.Open "Kursdeltagare", objConn

objRs.Open källa, koppling, cursor, låsning, kommando

Cursor bestämmer hur man flyttar sig inom recordset. Standard är framåt.

Låsning Anger hur posterna får användas, skriva/läsa:
objRS.open "Kursdeltagare", objConn Read-only
objRS.open "Kursdeltagare", objConn,,3 Skrivrättighet (två ,, för att den inte ska hoppa över cursor-kommandot)

Kommando hur ska källan tolkas:
standard tolkning är tabell i databas. Jmf "Kursdeltagare"

Lägga till i databas

objRS.open "kursdeltagare", objConn,,3
objRS.addnew förbereder databasen för en ny post, uppdaterar det autonumrerade fältet
objRS("namn")="Karl Karlsson" Stoppar in texten "Karl Karlsson" i fältet "namn"
objRS.update Uppdaterar databasen med den nya informationen.

Man vill ju inte behöva skriva in alla information för hand därför använder man istället ett formulär:
objRS("namn")=request.form("namn") Stoppar in värdet från fältet "namn" i formuläret.

 

SQL - Structured Query Language

Ett slags programmeringsspråk. Används till att hämta specifik data från en tabell. T ex Alla personer ii tabellen kursdeltagare som bor i Lund.

SQL - beståndsdelar

SELECT - vad som ska hämtas
FROM - varifrån det ska hämtas
WHERE - speciella villkor
ORDER BY - sortera efter speciella fält

SELECT * väljer ut alla fälten...
FROM kursdelatagare ...från tabellen kursdeltagare

SELECT namn,telefon väljer ut fälten namn och telefon...
FROM kursdeltagare ...från tabellen kursdeltagare

SELECT *
FROM kursdeltagare
WHERE namn="Annika" hämtar allt från tabellen där namn är lika med "Annika"
ORDER BY namn sorterar i namnordning
Man kan även ange [ASC/DESC]:

ORDER BY namn ASC

Fler...

WHERE namn like 'A%' Väljer bara namn som börjar på "A"

Finns hakparenteser med betyder det att det är "optional".

SQL tillsammans med objRS

Man måste deklarera SQL:en...
dim strSQL
strSQL="select * FROM Kursdeltagare ORDER BY namn"
dim objRS
set objRS=Server.CreateObject("ADODB.recordset")
objRS.open strSQL, objConn anger att vi ska använda sql-satsen

SQL och data från formulär

dim SQL
SQL="select * FROM Kursdeltagare WHERE namn=" & "'" & request.querystring("namn") & "'" & "ORDER BY namn DESC"
"'" är " ' " eftersom "namn" är en sträng och kräver fnuttar, här enkelfnuttar för att inte få dubbelt av "dubbelfnuttar".

Radera poster

objRS.delete tar bort en post

OBS! Man måste arbeta mot rätt rad i tabellen!
SELECT *
FROM Kursdeltagare
WHERE id=4

Uppdatera poster

objRS.update uppdaterar en post - används intetillsammans med objRS.addnew

objRS("Telefon")="040-55 55 55"
objRS.update

Felsökning

- Text fält måste ha enkla fnuttar runt dess värden
- Fält med mellanrum i sitt namn måste omringas av [ ]
- Set parametrar måste ha kommatecken mellan varandra