Avatar billede ndh Nybegynder
26. august 2003 - 14:41 Der 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?
Avatar billede ellebaek Nybegynder
26. august 2003 - 15:11 #1
jeg har et sådant script liggende...

2 sek.!
Avatar billede zetn Nybegynder
26. august 2003 - 15:12 #2
Fx:
hvis vi siger der er tre felter, x,y,z.

Så på rediger.asp?id=(besvarelses idet)

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.


Er det sådan noget du skal bruge?

med venlig hilsen
JW
Avatar billede dk_akj Nybegynder
26. august 2003 - 15:13 #3
Hvis du bruger autonummerering kan du få fat i det netop indsatte autonummer med @@identity

set rs = conn.execute ("select @@identity as id from tabel")
id = rs("id")

//akj
Avatar billede ellebaek Nybegynder
26. august 2003 - 15:21 #4
hmm...

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...

..Ellebæk!
Avatar billede tchami Nybegynder
26. august 2003 - 15:25 #5
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)

strQuestion = Request.Form("fldAnswer")
strComment = Request.Form("fldComment")
intID = Request.Form("fldId")

'## 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)
   
    Response.Redirect "index.asp"
End If

%>
<html>
<head><title>Rediger skema</title></head>
<body>
<form action="redigerskema.asp" method="post">
<input type="hidden" name="fldId" value="<%=intID%>">
Spørgsmål? - <input type="text" name="fldAnswer" value="<%=objSkemaRS("FELTNAVN")%>"><br>
Kommentarer - <textarea cols="45" rows="10" name="fldComment"><%=objSkemaRS("FELTNAVN")%></textarea><br>
<input type="submit" value="Gem">
</form>
</body>
</html>

Du skal altså kort sagt "bare" hente værdierne ud fra databasen og ligge dem ind i din formulars felters value.

Håber du kan bruge eksemplet til noget, ellers så bare spørg løs.
Avatar billede ndh Nybegynder
26. august 2003 - 15:50 #6
tchami.

I dit forslag mangler der ikke en database-forbindelse??
fldAnswer og fldComment hvor kommer de fra? Er det bare felter i db´en?
Avatar billede tchami Nybegynder
26. august 2003 - 15:58 #7
>> ndh

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:

Navn? - <input type="text" name="fldName" value="<%=objSkemaRS("navn")%>"><br>
Alder? - <input type="text" name="fldAlder" value="<%=objSkemaRS("alder")%>"><br>
Adresse? - <input type="text" name="fldAddress" value="<%=objSkemaRS("adresse")%>"><br>

Giver det mening?
Avatar billede ndh Nybegynder
27. august 2003 - 08:49 #8
tchami

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)
   
    Response.Redirect "skema.asp"
End If

%>
<html>
<head><title>Rediger skema</title></head>
<body>
<form action="redigerskema.asp" method="post">
<input type="hidden" name="id" value="<%=intID%>">
Spørgsmål? - <input type="text" name="system" value="<%=objSkemaRS("systemnavn")%>"><br>
Kommentarer - <textarea cols="45" rows="10" name="gammel"><%=objSkemaRS("gammel")%></textarea><br>
<input type="submit" value="Gem">
</form>
</body>
</html>

Hvad er galt?
Avatar billede dk_akj Nybegynder
27. august 2003 - 08:52 #9
set rs = conn.execute ("select @@identity as id from tabel")
intID = rs("id")


//akj
Avatar billede ndh Nybegynder
27. august 2003 - 08:59 #10
Prøv at uddybe akj
Avatar billede dk_akj Nybegynder
27. august 2003 - 09:00 #11
istedet for
intID = Request.Querystring("id")

skriver du
set rs = conn.execute ("select @@identity as id from tabel")
intID = rs("id")

Husk at rette kolonne og tabelnavn.

//akj
Avatar billede ndh Nybegynder
27. august 2003 - 09:07 #12
akj

Ved dit forslag får jeg fejlen:

Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A01A8)
Et objekt er obligatorisk: 'conn'
/kort/redigerskema.asp, line 2.

Min linie 2 er:
set rs = conn.execute ("select @@identity as id from tabel")

Tabellen i min database hedder tabel og jeg har en kolonne der hedder id??
Avatar billede dk_akj Nybegynder
27. august 2003 - 09:15 #13
flyt dette op over det nye script.

//akj

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("kort1.mdb")
Avatar billede ndh Nybegynder
27. august 2003 - 09:20 #14
Jeg får da flg. fejl:

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
Avatar billede dk_akj Nybegynder
27. august 2003 - 09:23 #15
Hvilken linie får du fejl i ??
Hvad står der i den linie ??

//akj
Avatar billede ndh Nybegynder
27. august 2003 - 09:25 #16
Der står intet linienummer, blot hvad jeg allerede har skrevet
Avatar billede dk_akj Nybegynder
27. august 2003 - 10:15 #17
kan du ikke lige poste dit script ??

//akj
Avatar billede ndh Nybegynder
27. august 2003 - 10:34 #18
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>

redigeringskema2.asp
<%
strQuestion = Request.Form("systemnavn")
strComment = Request.Form("gammel")
intID = Request.Form("Id")
systemnavn = request.form ("systemnavn")
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"
%>
Avatar billede ndh Nybegynder
27. august 2003 - 10:37 #19
Tchami og akj i har gjort en indsats. Jeg vil give tchami 150 p. og akj 50 p., hvis i gør det muligt at for mig at give jeg point.
Avatar billede dk_akj Nybegynder
27. august 2003 - 10:39 #20
Takker :-)

//akj
Avatar billede dk_akj Nybegynder
27. august 2003 - 10:50 #21
tchami >>
Din andel af points ligger her :-)
http://www.eksperten.dk/spm/393133

//akj
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester