Ett Administrations script för webb baserad databas del 2
Förord
I förra artikeln så började vi att bygga upp ett webbaserat administrativt system för en Access-databas. Vi gick igenom förutsättningarna, och konstruerade databasen Member.mdb, och inkluderade de fyra tabeller som krävdes för att svara mot vårat behov. Vi byggde också upp ett antal asp och funktions sidor: styles.css: Header.asp Foter.asp MemberMenu.asp Nu skall vi ta vid, där vi slutade, men vi skall koncentrera oss på två viktiga saker, nämligen städerna och intressen, och de asp filer som där tillhör. Vi skall också börja med att bygga upp update.asp, en fil som vi kommer att återkomma till, gång på gång.Innehåll
»»
»
»
»
»
»
»
»
»
»
»
Relaterade artiklar
» Ett Administrations script för webb baserad databas Del 1
Fortsätta med asp sidorna:
Det första vi skall göra nu, är att bygga de asp-filer som krävs för att lägga till städerna.
newCity.asp
<%=Request.QueryString("message")%>
Lägg märke till, att vi börjar och slutar filen med includefiler. Om detta förklarade jag i förra artikeln.
Lägg märke till att om vi får ett error, så skrivs det ut med röd makgrund. Men varför skall vi få
ett error?
Jo det förklara sig ganska så självt, när vi börjar att titta på update.asp.
update.asp 1
<%'För att kunna kontrollera vad man får in, i querystring eller request.form använd detta
'Response.Write "String: " & Request.QueryString & "
"
'Response.Write "Form: " & Request.Form & "
"'
Dim sCity,sInterest,sName,sStreet
dim sIntrerest,i,aIntr
%>
<%=Request.QueryString("message")%>
<%'Vi lägger in en Select Case för att undersöka vilken knapp som submittade
Select Case Request.Form("btnsubmit")
Case "New City"
'Om ingen stad är ifylld
If LEN(Request.Form("City"))=0 then
Response.Redirect "newCity.asp?ERROR=" & Server.URLEncode("Du måste fylla i en stad!!")
else
'Annars så lägger vi in den nya staden
sCity = UCASE(FixaTecken(Request.Form("City")))
Set RS = Server.CreateObject("ADODB.Recordset")
SQL ="Select City FROM t_City WHERE City = '" & sCity & "'"
RS.Open SQL, Connection, 3, 3
if RS.EOF THEN
SQL = ("Insert INTO t_City(City)VALUES( '" & sCity & "' )")
Connection.Execute(SQL)
Response.Write "
" & sCity & " är nu registrerad! "
else
Response.Redirect "newCity.asp?ERROR=" & Server.URLEncode("Denna stad är redan registrerad!!")
End If
RS.Close
Set RS=Nothing
end if
update.asp är uppbyggd kring en select case-sats. Vi tar helt enkelt reda på vad submitt-knappen
hette, och när vi har hittat den (i detta fallet ”New City”) då har vi fått en variabel i
”Select Case Request.Form("btnsubmit")”
Vi kollar efter så att vi har fått ett värde, om inte så redirekta vi tillbaka med en error-flagga.
Har vi däremot ett värde, och det inte är en dubblet, då lägger vi in den i databasen, efter att ha
kollat så att det inte har följt med någon enkelfnutt(SQLInjection).
Som Du säkert lägger märke till, så använder jag mig inte av något recordset, när jag lägger in
någonting i databasen. Orsakerna är många men genom att använda sig av Connection-objectet,
så behöver jag aldrig öppna databasen, och inte heller oroa mig över att den delen gick snett.
(Jämför med rekordsetet, där Du måste ta fram rätt pekare och rätt låsning).
När allt detta är gjort, så återstår det viktigaste av allt, STÄDA UPP EFTER ER.
Japp, så är det, vi måste stänga efter oss, så att ingenting ligger och äter på serverns ramminnen.
Nästa fil är editCity.asp som vi skall bekanta oss med. Den filen tar fram alla de städer som vi
har skrivet in i databasen, och visar oss med ett ”varannanradfärgat” utseende.
editCity.asp
<%=Request.QueryString("message")%>
<%'Här tar vi fram alla städer som finns i databasen
Dim rst,strSQL,CurrentRecord,j,rowColor
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adCmdText = 1
strSQL="SELECT CityID,City FROM t_City ORDER BY CityID "
Set rst = Server.CreateObject("ADODB.Recordset")
rst.Open strSQL, connection, adOpenStatic, _
adLockReadOnly, adCmdText
CurrentRecord = 0
j = 0
If Not rst.EOF Then
%>
CityID>
City
<%'Detta ger varannan rad olika färg
Do While Not rst.EOF
j = j + 1
if j mod 2 then
rowColor = "#FFF7F2"
else
rowColor = "#FFFFFF"
end if
%>
">
<%= rst("CityId") %>
<%= rst("City") %>
<%'Nästa stad
rst.MoveNext
Loop
Else
%>
Inga Kategorier Registrerade!
<%
'Städa upp
End If
rst.Close
Set rst=Nothing
%>
Kommentarerna som jag har gjort i filen, förklarar nog det mesta. Lägg dock märke till att jag
har dubbla argument i querystringen (länken till nästa sida).
Genom att klicka på rätt ID:nr, så tar det oss till CityUpdRec.asp.
CityUpdRec.asp
<%=Request.QueryString("message")%>
<%'Vi öppnar databasen med det ID vi har i querysträngen
Set RS = Server.CreateObject("ADODB.Recordset")
SQL ="Select CityId,City FROM t_City WHERE CityID ="& Request("Id")
RS.Open SQL, Connection, 3, 3
if NOT RS.EOF THEN
%>
<%
else
response.write "Ingen data hittades"
end if
'Städa upp
RS.CLOSE
SET RS = NOTHING
%>
Inte heller här är det några märkvärdigheter, lägg dock märke till att jag har lagt till en
gömd form(hidden form).
Nu kan vi editera dvs. ändra namnet på städerna(en i sänder) eller ta bort staden ur databasen.
Slutligen så skickas vi återigen till update.asp.
update.asp 2
Case "Uppdate City"
'Uppdatera staden
sCity = UCASE(FixaTecken(Request.Form("City")))
SQL = "Update t_City Set City='" & sCity & "' WHERE CityId ="& Request("Id")
Connection.Execute(SQL)
Response.Write "" & sCity & " är nu uppdaterad! "
Case "Delete City"
'Ta bort staden
SQL = "DELETE FROM t_City WHERE CityId = "& Request("Id")
Connection.Execute(SQL)
Response.Write "Staden med IDnr: " & Request("Id") & " är nu borttaget ur systemet!
"
Nu börjar ni väll att känna igen systemet?
Vi tar emot rätt namn på submitt knappen och tittar efter i select case vad vi skall göra.
När vi uppdatera eller deleta, så gör vi det genom att kolla mott det ID vi har med oss i
querystringen likadant i bägge fallen.
När vi skall jämföra någonting i SQL:en, så är det viktigt att komma rätt när det gäller fnuttarna.
Jämför vi med en string skall det vara: City =’ "& Request("City") & ”’”
Om det är ett tal: CityId = "& Request("Id") &”
Är det datum(gäller bara Access) date = #”& now() &”#”
newInterest.asp
<%=Request.QueryString("message")%>
Här är det inte mycket att tillägga, denna filen ser nästan likadan ut som newCity.asp
Vi lägger in även denna i uppdate.asp.
update.asp 3
Case "New Interest"
'Nytt intresse, först så kollar vi om strängen är tom, är den det så skickar vi ett error
If LEN(Request.Form("Interest"))=0 then
Response.Redirect "newInterest.asp?ERROR=" & Server.URLEncode("Du måste fylla i ett intresse!!")
else
'Annars så lägger vi in det nya intresset
sInterest = FixaTecken(Request.Form("Interest"))
Set RS = Server.CreateObject("ADODB.Recordset")
SQL ="Select Interest FROM t_Interest WHERE Interest = '" & sInterest & "'"
RS.Open SQL, Connection, 3, 3
if RS.EOF THEN
SQL = ("Insert INTO t_Interest(Interest)VALUES( '" & sInterest & "' )")
Connection.Execute(SQL)
Response.Write "" & sInterest & " är nu registrerad! "
else
Response.Redirect "newInterest.asp?ERROR=" & Server.URLEncode("Detta intresse är
redan registrerad!!")
End If
RS.Close
Set RS=Nothing
end if
Var noga med att lägga in den koden nedanför den tidigare koden i update.asp
editInterest.asp
<%=Request.QueryString("message")%>
<%'Här editera vi intressen
Dim rst,strSQL,CurrentRecord,j,rowColor
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adCmdText = 1
strSQL="SELECT i_Id,Interest FROM t_Interest ORDER BY i_Id"
Set rst = Server.CreateObject("ADODB.Recordset")
rst.Open strSQL, connection', adOpenStatic, adLockReadOnly, adCmdText
CurrentRecord = 0
j = 0
If Not rst.EOF Then
%>
i_ID>
Interest
<%
Do While Not rst.EOF
j = j + 1
if j mod 2 then
rowColor = "#FFF7F2"
else
rowColor = "#FFFFFF"
end if
%>
">
<%= rst("i_Id") %>
<%= rst("Interest") %>
<%
rst.MoveNext
Loop
Else
%>
Inga Kategorier Registrerade!
<%'Städa upp
End If
rst.Close
Set rst=Nothing
%>
Inte heller här är det någonting att tillägga, då även denna fil följer tidigare mönster, så
vi fortsätter med InterestUpdRec.asp.
InterestUpdRec.asp
<%=Request.QueryString("message")%>
<%'Initiera ett recordset, och execevera SQL
Set RS = Server.CreateObject("ADODB.Recordset")
SQL ="Select i_Id,Interest FROM t_Interest WHERE i_ID ="& Request("Id")
RS.Open SQL, Connection, 3, 3
if NOT RS.EOF THEN
%>
<%
else
response.write "Ingen data hittades"
end if
'Städa upp
RS.Close
SET RS = NOTHING
%>
Vi följer väl inlärda mönster, och fortsätter till update.asp.
update.asp 4
Case "Uppdate Interest"
'Uppdatera intresset
sInterest = FixaTecken(Request.Form("Interest"))
SQL = "Update t_Interest Set Interest='" & sInterest & "' WHERE i_Id ="& Request("Id")
Connection.Execute(SQL)
Response.Write "" & sInterest & " är nu uppdaterad! "
Case "Delete Interest"
Som ni kan se, så är det inte många rader kod, och jag har sparat det bästa till sist.
Den uppmärksamme läsaren ser säkert att det inte finns någon kod för Case "Delete Interest".
Låt oss säga, att det blir din uppgift tills nästa artikel är skriven.
Avslut:
Vi har idag byggt upp den större biten av detta administrativa systemet. Vi har ifrån start till mål fixat till städer, så att det går att lägga till nya, ändra och ta bort, som fungerar väl.
Likadant med intressen, nya, ändra och ta bort(om Du har gjort den uppgiften) så fungera det bra.
Det slutgiltiga målet kommer i och med artikel nr3, så håll tillgodo så länge.
Del 3 utkommer snart!!!
Benni Svensson
0 Kommentarer