Ett Administrations script för webb baserad databas del 3
Förord
I de föregående artiklarna, så tillverkades grunderna till vad vi skall slutföra idag. Databasen är klar, style filen och funktions filen likaså. Du bör ha ett fungerande system nu, som klarar av att lägga till nya städer och nya intressen samt editering av dessa. Det som nu återstår, är det mest spännande i hela denna artikelserie, att kunna lägga till nya medlemmar, knyta samman de med en stad samt lägga till deras intressen(ett eller flera). Vi skall också kunna ändra och ta bort(editera) dessa medlemmar, och det blir det sista vi gör idag.Innehåll
»»
»
»
»
»
Relaterade artiklar
» Ett Administrations script för webb baserad databas Del 1» Ett Administrations script för webb baserad databas del 2
Fortsätt med asp sidorna
Det vi skall börja med är att lägga till en ny medlem. Vi måste också lägga till en option(combobox) så att vi kan välja vilken stad medlemmen bor i. Vi skall också lägga in en checkbox för varje
intresseområde som finns i databasen. Detta löserr vi med en enkel loop.
newMember.asp
<%=Request.QueryString("message")%>
<%'Här lägger vi in nya medlemmar
'Först så hämtas alla städerna
set rs= server.createobject("adodb.recordset")
SQL="SELECT CityID, City FROM t_City ORDER BY City"
rs.open SQL, Connection, 2, 2
%>
Viktigt att notera är att option.value knyts mot rs("CityID") och att texten(utanför option taggen)
har vi rs("CityID").Orsaken är den, att vi sparar CityId i databasen ,medans City är med för
läsbarhetens skull.
Vi gör precis samma sak med checkboxen, sparar rs(”i_Id”) i checkboxens value och skriver ut
RS("Interest") på utsidan av taggen.
update.asp 5
Tillbaka igen till update.asp där vi skall lägga till den nya medlemmen. För att få in alla intressen, så måste vi först splita upp querystringen och loopa igenom, för att kunna göra en insert för
varje intresse.
Case "New Member"
'Ny medlem, först kollar vi om strängen är tom
If LEN(Request.Form("City"))=0 then
Response.Redirect "newMember.asp?ERROR=" & Server.URLEncode("Du måste fylla i ett namn!!")
else
'Annars så lägger vi in medlemen
sName = Request.Form("Name")
sStreet = FixaTecken(Request.Form("Street"))
sCity = Request.Form("City")
SQL = ("Insert INTO t_Member(Name,Street,City)VALUES( '" & sName & "','" & sStreet & "'," & sCity & " )")
Connection.Execute(SQL)
Response.Write "" & sName & " är nu registrerad! "
'Vi lägger im medlemens intresse
Set RS = Server.CreateObject("ADODB.Recordset")
SQL ="Select m_Id FROM t_Member WHERE Name = '" & sName & "'"
RS.Open SQL, Connection, 3, 3
IF NOT RS.EOF then
'Vi måste splita ifrån request.form, så att vi kan lägga in ALLA intressen
sIntrerest = Request.form("Interest")
aIntr = split(sIntrerest, ",", -1, 1)
For i = 0 to ubound(aIntr)
SQL = ("Insert INTO t_MemberInterest(m_Id,i_ID)VALUES( " & RS("m_Id") & "," & aIntr(i) & " )")
Connection.Execute(SQL)
Next
ELSE
Response.Write"Ingen post är registrerad"
END IF
RS.Close
Set RS=Nothing
end if
Vi börjar med att kolla så vi har ett namn att jobba med, därefter så gör vi variabler av våra
request.form(name,street och city) samt gör en insert.
Därefter så gör vi en databas förfrågan om vilket ID som våran insert genererade i databasen.
Sen kom spliten, en ny insert för varje intresse och efter uppstädning så var det klart.
editMember.asp
Den här filen är väldigt lik editCity.asp och editInterest.asp.
<%=Request.QueryString("message")%>
<%'Här hämtar vi alla registrerade medlemmar
Dim rst,strSQL,CurrentRecord,j,rowColor
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adCmdText = 1
strSQL="SELECT t_Member.m_id, t_Member.Name, t_Member.Street, t_City.City " & _
" FROM t_City INNER JOIN t_Member ON t_City.CityID = t_Member.City"
Set rst = Server.CreateObject("ADODB.Recordset")
rst.Open strSQL, connection, adOpenStatic, _
adLockReadOnly, adCmdText
CurrentRecord = 0
j = 0
If Not rst.EOF Then
%>
ID>
Namn
Adress
Stad
<%
Do While Not rst.EOF
'Färga varannan rad
j = j + 1
if j mod 2 then
rowColor = "#FFF7F2"
else
rowColor = "#FFFFFF"
end if
%>
">
<%= rst("m_Id") %>
<%= rst("Name") %>
<%= rst("Street") %>
<%= rst("City") %>
<%
rst.MoveNext
Loop
Else
%>
Inga Kategorier Registrerade!
<%
End If
'Städar upp
rst.Close
Set rst=Nothing
%>
MemberUpdRec.asp
Med denna fil, så laddar vi in de värden som vi har i databasen, beroende på vilken post som klickades på i editMember.asp.
Filen har samma grundutförande som newMember.asp, vad gäller kontrollerna och liksom
newMember.asp så loopar vi igenom för att hitta alla städer och alla intressen.
Vad som skiljer är, att i option taggen, så lägger vi också in vad vi har sparat i databasen,
för läsbarhetens skull.
Intressena loppas också men inne i denna loop, så ligger ett SQL-anrop till databasen, som
kollar om detta i_ID är inskrivet, är den det så skall den checkas, annars inte.
<%=Request.QueryString("message")%>
<%'Här initiera vi de olika recordseten, samt dimmar alla variabler
Dim rst,RS1,RS2,SQL1,SQL2,sInterest
set rs= server.createobject("adodb.recordset")'för City
set rst= server.createobject("adodb.recordset")'för Members
set RS1= server.createobject("adodb.recordset")'för Interest
set RS2= server.createobject("adodb.recordset")'fär MemberInterest
'Ta fram städerna
SQL="SELECT CityID, City FROM t_City ORDER BY City"
rs.open SQL, Connection, 2, 2
'Ta fram medlemen
SQL1="SELECT t_Member.m_id, t_Member.Name, t_Member.Street, t_Member.City, t_City.City " &_
" FROM t_City INNER JOIN t_Member ON t_City.CityID = t_Member.City " &_
" WHERE t_Member.m_id ="& Request("Id")
rst.open SQL1, Connection, 2, 2
%>
update.asp
Och nu återstår den sista delen av update.asp. Jag hoppas att Du har förstått, att varje gång som vi kommer till update.asp, så skall den koden läggas nedanför den förra koden.
Case "Uppdate Member"
'Uppdatera medlemmen
sName = Request.Form("Name")
SQL = "Update t_Member Set Name='" & sName & "',Street ='" & Request.Form("Street") & "',
City = "& Request.Form("City") & " WHERE m_Id ="& Request("Id")
Connection.Execute(SQL)
'Uppdatera intressen men först ta bort de gammla
SQL = "DELETE FROM t_MemberInterest WHERE M_Id = "& Request("Id")
Connection.Execute(SQL)
Set RS = Server.CreateObject("ADODB.Recordset")
SQL ="Select m_Id FROM t_Member WHERE Name = '" & sName & "'"
RS.Open SQL, Connection, 3, 3
IF NOT RS.EOF then
sIntrerest = Request.form("Interest")
aIntr = split(sIntrerest, ",", -1, 1)
For i = 0 to ubound(aIntr)
SQL = ("Insert INTO t_MemberInterest(m_Id,i_ID)VALUES( " & RS("m_Id") & "," & aIntr(i) & " )")
Connection.Execute(SQL)
Next
ELSE
Response.Write"Ingen post är registrerad"
END IF
RS.Close
Set RS=Nothing
Response.Write "" & sName & " är nu uppdaterad! "
Case "Delete Member"
'Tar bort all information om medlemen
SQL = "DELETE FROM t_MemberInterest WHERE M_Id = "& Request("Id")
Connection.Execute(SQL)
SQL = "DELETE FROM t_Member WHERE M_Id = "& Request("Id")
Connection.Execute(SQL)
Response.Write " Medlemen med ID:nr " & Request("Id") & " är nu bortagen
ur registret! "
end select
Vi börjar med att uppdatera medlemmens uppgifter. För att kunna uppdatera intressena,
så måste vi först ta bort alla som finns registrerade på det id:nr. Därefter så gör vi
split/loop/insert, som vi har gjort tidigare.
Jag visar också här, hur Du tar bort en medlem. Det måste börjas med att ta bort alla intressen.
Gör Du tvärsom så får du problem. Vi avsluta selecten, och glöm inte att se till att Du har
en ASP-avslutnings tag och den avslutande includen i slutet av filen.
Avslut
Nu har vi nått målet för våra förutsättningar. Vi kan nu lägga till medlemar och editera dem
som det behagar oss.
Eftersom scriptet är dynamiskt, kan du ha hur många städer som helst, och hur många
intressen som det behagas, Du har fått allt det Du ville ha…
nästan.
Benni Svensson
0 Kommentarer