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 |
<%Dim iVar, iOldVar |
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 Subtrahera |
Multiplicera Dividera |
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