Ett Administrations script för webb baserad databas Del 1
Förord
Del 1 En ofta förekommen fråga är, hur kan jag administrera min databas på webben? Att på ett smidigt sätt lösa detta möter vanligen inga större problem, dock måste man tänka på säkerhet var man placera sin databas och hur man skriver sin kod. Jag vill med denna artikel visa hur jag har löst detta, för mig ett väl fungerande system. Ingenting är ju så pass bra, utan att det kan göras bättre, och Du som läsare hittar säkert falluckor som jag har missat. Hur som helst så börjar vi ifrån början.Innehåll
»»
»
»
Relaterade artiklar
Problemställning:
Uppgiften är att skapa en databas, för ett medlemsregister, och registrera namn, adress, stad och intresse. Vi måste också göra ett försök att normalisera databasen, i detta fallet menas det med att undvika upprepande inmatningar.
Det kan alltså se ut så här:
Pelle Johansson
Stora gatan 12
Stockholm
Motorcykel
Dator
Barn
Gösta Linderot
Nya vägen 2
Värnamo
Tjejer
Segling
Per Westling
Enskedevägen 112
Stockholm
Dator
Segling
Osv.
Vad vi upptäcker genast är att städernas namn kan förekomma på flera ställen, och då detta bryter
mot normaliseringsordningen, så betyder det att vi måste ändra det fältet(ifrån text till tal), skapa
en ny tabell som vi lägger som relation till våran huvudtabell.
Detta fungerar väldigt bra, då vi kommer ifrån inmatnings fel, dvs. risken för felstavad inmatning
är borta. Har vi stavat fel i tabellen som rymmer städerna, så är det felstavat överallt(där vi
referera till detta fält), men är lika lätt avhjälpt, genom att det är endast på ett ställe vi behöver
ändra stavningen på.
Nästa problem är värre. Som vi ser så kan man ha olika många intressen, och det gör att vi kan
inte lösa det på samma sätt som med städer. Vad vi måste göra är, att ha en mellantabell, som sparar id ifrån medlemmen och som också
spara id ifrån en tabell med intressen. På detta vis så kan en medlem ha hur många eller hur
få som helst, och dessa teoretiska problem är borta.
Bygga databasen:
I detta exempel så använder jag Access, ett ypperligt program för inte alltför stora applikationer.
Döp databasen till Member.mdb
Vi skall ha fyra tabeller:
t_City
Fältnamn Fälttyp Längd Övrigt
CityID Räknare Primärnyckel
City Text 30
t_Interest
Fältnamn Fälttyp Längd Övrigt
i_Id Räknare Primärnyckel
Interest Text 30
t_MemberInterest
Fältnamn Fälttyp Längd Övrigt
M_ID tal INGEN PRIMÄRNYCKEL
I_ID tal ” ”
t_Member
Fältnamn Fälttyp Längd Övrigt
m_id Räknare Primärnyckel
Name Text 30
Street Text 30
City Tal Främmande nickel till t_City
Det är väldigt viktigt att vi tilldela fälten rätt egenskaper.
Vi måste också upprätta relationerna mellan tabellerna:
Denna bild är nog ganska så självförklarande med tanke på databasens uppbyggnad.
Bygga asp och rutin -filerna
Då databasen nu är färdig, så är det dags att titta på hur administrations systemet är upplagt.
Jag kunde inte låta bli att leka, så det finns en styles.css, väldigt enkel men har Du inte sysslat
med CSS tidigare, så får Du en uppfattning om hur man kan göra.
Det finns en Function.asp där funktionerna är sparade. Här finns två funktioner ” FixaTecken”
för att skydda sig mot SQLInjection (inga enkelfnuttar in i databasen), och shortUrlName, som helt
enkelt plockar fram filnamnet ur en sökväg.
För att slippa skriva för mycket kod, så finns det en Header.asp som includeras i början av varje
ASP-sida och en Foter.asp som ligger sist på varje ASP-sida.
Som synes i diagrammet ovan, så finns det en meny, varifrån man navigera till olika filer, beroende
på vad man skall göra(lägga till ny stad/editera stad,nytt intresse/editera intresse eller lägga till ny
medlem/editera medlem.
Oavsett vad Du väljer så uppdateras all information på EN sida, uppdate.asp. Detta gör att det blir
lätt att underhålla systemet.
styles.css:
BODY
{
COLOR: #804040;
FONT-FAMILY: verdana,geneva;
FONT-SIZE: 10pt;
}
TD
{
BORDER-BOTTOM: black thin;
BORDER-LEFT: black thin;
BORDER-RIGHT: black thin;
BORDER-TOP: black thin;
COLOR: #804040;
FONT-FAMILY: trebuchet, verdana, Arial, geneva;
FONT-SIZE: 8pt;
}
A:link
{
COLOR: #004b97;
FONT-WEIGHT:bold;
}
A:visited
{
COLOR: #004b97;
FONT-WEIGHT:bold;
}
A
{
COLOR: #0033ff;
TEXT-DECORATION:none;
}
a:hover
{
font-weight:900 (fet)
COLOR:#804040;
text-decoration: underline overline;
BACKGROUND-COLOR:#FBE2D3;
}
.grey
{
color:white;
font-size: 10pt;
FONT-WEIGHT: bold;
background-color: #804040;
}
Kommentare för styles.css är överflödiga.
Function.asp
<script language=VBScript runat=Server>
Function FixaTecken(sfix)
sfix =Replace(Trim(sfix), "'","''")
sfix = Replace(sfix, "|", "")
FixaTecken = sfix
End Function
Function shortUrlName(strPath)
strPath = Request.ServerVariables("PATH_INFO")
strPath = Mid(strPath, InStrRev(strPath, "/") + 1)
shortUrlName = strPath
End Function
</script>
Även Function.asp talar sitt tydliga språk, vi aktar oss för farliga tecken, replaca dem
helt enkelt.
Header.asp:
<%
Option Explicit
Response.buffer = True
Dim titel,Connection,RS,SQL
If request.Querystring("message")="" then
titel ="Medlemar"
else
titel = request.Querystring("message")
End If
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.MapPath("Member.mdb")
%>
<%=titel%>
Högst upp så står det Option Explicit, och detta är för att Du inte skall missa att dimma några
variabler (dimma=reservera minnesplats).
Därefter så har vi Response.buffer = True vilket innebär att servern inte skall skicka någonting
förrän hela sidan är exekverad.
Därefter kolla vi om querysträngen innehåller någonting, och i så fall så får det bli titeln på våran
sida, eller så skall den vara ”Medlemar”
Slutligen så har jag lagt in en dataconnection här, och i och med att den ligger i header.asp, så är
den inkluderad i alla ASP-sidorna.
Foter.asp:
<%
Connection.Close
Set Connection=Nothing
IF shortUrlName(Request.ServerVariables("PATH_INFO")) <>"MemberMenu.asp" then
%>
[Tillbaka till Menyn]
<% END IF
IF shortUrlName(Request.ServerVariables("PATH_INFO")) = "CityUpdRec.asp" or
shortUrlName(Request.ServerVariables("PATH_INFO")) ="InterestUpdRec.asp" or
shortUrlName(Request.ServerVariables("PATH_INFO")) ="MemberUpdRec.asp"then
%>
[Avbryt och välj ett annat ID]
<%
END IF
%>