26. august 2003 - 14:41Der er
20 kommentarer og 1 løsning
Redigere et svar i et spørgeskema
Jeg har lavet et spørgeskema, hvor brugerne når de har besvaret spørgsmålene kan se deres besvarelse. Databasen er en Accessdb.
Mit problem er nu at visse brugere kan have behov for at rette i deres besvarelser. Altså hvordan henter jeg på samme tid dataene via ASP i databasen, og viser brugerne de værdier de har indtastet i de forskellige felter samtidig med, at brugerne får mulighed for at rette i dem?
strSQL = "Select * from TABELNAVN where id = " & request.querystring("id") & "" set rs = conn.execute(strSQL)
Så henter den alle de informationer ned hvor id passer til. Så er det bare at lave nogle nye forms og value='" & rs("x") & "' fx, og så hen til en side hvor det bliver smidt ind i databasem igen Where id = det samme som før.
Havde ikke lige et spørgeskema, men du kan ved at bruge følgende få det hele opskrevet i en lang række hvor du har de forskellige tekstfelter så man kan ændre i dem her, inden de bliver sat ind i databasen. Altså på den side du sender til:
<% for each item in request.form response.write item & "<input type='text' value='"& request.form(item) & "' name='" & item & "'><br> next %> Så til sidst kan du submitte denne side, og derved først anden gang få dataene indsat i databasen...
Nu skriver du ikke hvordan din tabel i databasen er bygget op, men jeg går ud fra at hver enkelt record har et auto-genereret id. Når en bruger så skal rette i deres spørgeskema vælger du recorden ud fra id'et. F.eks.:
Bruger A har udfyldt spørgeskemaet og i databasen har det fået id'et 1. Så laver du et link på din side (lad os kalde den index.asp) der ligner dette: <a href="redigerskema.asp?id=1">Rediger Spørgeskema</a>
Derefter opretter du en ny side, redigerskema.asp, og tilføjer følgende stykke kode:
<%
intID = Request.Querystring("id")
'## Vælg skema der skal ændres i strSelectSkemaSQL = "SELECT * FROM tabel WHERE id = " & intID & "" Set objSkemaRS = Conn.Execute(strSelectSkemaSQL)
'## Hvis der er klikket gem gemmes ændringerne og der redirectes til index.asp If Len(strQuestion) Then strUpdateSkemaSQL = "UPDATE tabel SET svar = '" & strQuestion & "', comment = '" & strComment & "' WHERE id = " & intID & "" Conn.Execute(strUpdateSkemaSQL)
Jo, men jeg viste jo ikke hvordan din database forbindelse så ud, så den skal selvfølgelig tilføjes.
fldAnswer og fldComment er navne på felterne i formularen, men du kan kalde dem hvad du vil. Som du kan se står der <%=objSkemaRS("FELTNAVN")%>, det er dine felter i db'en (du skal selvfølgelig udskifte FELTNAVN med det felterne hedder i din db). Hvis du f.eks. har tre felter i din db der hedder: navn, alder og adresse kan du ligge dem ind i din formular således:
Det er lykkes mig at hente værdierne ind i formen, men når jeg skal gemme gemme dem igen får jeg flg. fejl: Fejltype: Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "id =". /kort/redigerskema.asp, line 7
Linie 7 er: Set objSkemaRS = Conn.Execute(strSelectSkemaSQL)
Hele scriptet ser således efter min pasning til dit forslag:
<% intID = Request.Querystring("id") '## Vælg skema der skal ændres i strSelectSkemaSQL = "SELECT * FROM tabel WHERE id = " & intID & "" Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("kort1.mdb") Set objSkemaRS = Conn.Execute(strSelectSkemaSQL) strQuestion = Request.Form("systemnavn") strComment = Request.Form("gammel") intID = Request.Form("Id")
'## Hvis der er klikket gem gemmes ændringerne og der redirectes til skema.asp If Len(strQuestion) Then strUpdateSkemaSQL = "UPDATE tabel SET systemnavn = '" & strQuestion & "', gammel = '" & strComment & "' WHERE id = " & intID & "" Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("kort1.mdb") Conn.Execute(strUpdateSkemaSQL)
Fejltype: ADODB.Field (0x80020009) Enten er BOF eller EOF sand, eller den aktuelle post er blevet slettet. Den anmodede handling kræver en aktuel post. /kort/redigerskema.asp
Jeg har nu selv løst gåden. Fejlen lå bl.a. i at id-variablen var tom. Jeg har derfor løst det med to script. Måske ikke så pænt, men det ser ud til at virke. de er her:
Redigeringskema.asp <% intID = Request.Querystring("id") strSelectSkemaSQL = "SELECT * FROM tabel WHERE id = " & intID & "" Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("kort1.mdb") Set objSkemaRS = Conn.Execute(strSelectSkemaSQL) strQuestion = Request.Form("systemnavn") strComment = Request.Form("gammel") If Len(strQuestion) Then strUpdateSkemaSQL = "UPDATE tabel SET systemnavn = '" & strQuestion & "', gammel = '" & strComment & "' WHERE id = " & intID & "" Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("kort1.mdb") Conn.Execute(strUpdateSkemaSQL) Response.Redirect "skema.asp" End If %> <html> <head><title>Rediger skema</title></head> <body> <form action="redigerskema2.asp" method="post"> <input type="text" name="id" value="<%=intID%>"> Spørgsmål? - <input type="text" name="systemnavn" value="<%=objSkemaRS("systemnavn")%>"><br> Kommentarer - <textarea cols="45" rows="10" name="gammel"><%=objSkemaRS("gammel")%></textarea><br> <input type="submit" value="Gem"> </form> </body> </html>
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.