Avatar billede martin100 Nybegynder
18. januar 2005 - 22:29 Der er 17 kommentarer og
1 løsning

Resultat skal gemmes i session?

Hejsa.

Jeg er fuldstændig nybegynder i ASP og har langt om længe fået åbnet en Database forbindelse, hvor den vælger et random spørgsmål fra en DB. Derefter skal man kunne svare og gå videre til næste spørgsmål. Der er også lavet så det samme spørgsmål ikke kan vises to gange!!

Men problemet nu ligger i at jeg ikke ved hvordan jeg skal komme videre:

1. Se her:
http://www.2mwebdesign.dk/atpl/random2.asp

2. Reload indtil der ikke er flere spg i DB.

3. Hver gang man har lavet sit valg skal man kunne gemme svaret i en session for til sidst at sammenligne brugerens resultat med det rigtige svar som ligger i databasen.

Men hvordan får jeg den værdi brugeren vælger i min form til at gemme hans/hendes svar i en session, for senere at kunne give en sammenligning og en procentvis sats der angiver, hvor mange rigtige svar man har haft?

Håber i forstår, hvor jeg vil hen!
Avatar billede cpufan Juniormester
18. januar 2005 - 22:43 #1
session.contents("svar1") = request("answer")

gemmer svaret hele sessionen igennem
Avatar billede martin100 Nybegynder
18. januar 2005 - 22:45 #2
Ja okay. Som sagt så er jeg nybegynder.
Forklar lige lidt mere detaljeret. Det ville være rart med et eksempel?
Avatar billede cpufan Juniormester
18. januar 2005 - 22:48 #3
så vis mig din kode til siden, det er nemmest at bygge videre på det
Avatar billede softspot Forsker
18. januar 2005 - 22:48 #4
Du kan lave en struktur i en streng, som f.eks. indeholder skiftevis id på spørgsmål og svar på det spørgsmål. Noget i stil med dette:

"10|3|4|2|7|2|2|3|5|1"

Når et nyt svar ruller ind fra en form tilføjer du bare ID hhv. svar-værdien i enden af den streng således:

Session("brugersvar") = Session("brugersvar") + Request.Form("ID") + "|" + Request.Form("Svar")

Til slut kan du så splitte strengen op vha. funktionen Split(Session("brugersvar"), "|") - den resulterer i et array - og derefter gennemløbe dette array og slå på i databasen for hvert enkelt svar. Noget i stil med:

Dim SvarArray
Dim Svar
Dim SvarIndex

SvarArray = Split(Session("brugersvar"), "|")

SvarIndex = 0
Do While SvarIdx < UBound(SvarArray)
  Spoergsmaal = SvarArray(SvarIndex)
  Svar = SvarArray(SvarIndex + 1)
 
  'TO DO: Slå op i databasen og sammenlign svar på spørgsmål med korrekt svar

  'TO DO: Evt. tilbagemelding til brugeren om resultatet af besvarelsen

  ' Spring 2 frem i listen
  SvarIndex = SvarIndex + 2
Loop

Håber det hjælper, ellers må du lige rette mig ind på sporet igen :)
Avatar billede softspot Forsker
18. januar 2005 - 22:50 #5
Sorry, havde ikke lige fået opdateret mine variabelnavne. Det skal se således ud:

Dim SvarArray
Dim Svar
Dim SvarIndex

SvarArray = Split(Session("brugersvar"), "|")

SvarIndex = 0
Do While SvarIndex < UBound(SvarArray)
  Spoergsmaal = SvarArray(SvarIndex)
  Svar = SvarArray(SvarIndex + 1)
 
  'TO DO: Slå op i databasen og sammenlign svar på spørgsmål med korrekt svar

  'TO DO: Evt. tilbagemelding til brugeren om resultatet af besvarelsen

  ' Spring 2 frem i listen
  SvarIndex = SvarIndex + 2
Loop
Avatar billede martin100 Nybegynder
18. januar 2005 - 22:55 #6
Softspot -> Jeg kan godt se din ide med den streng struktur.

I DB ligger

Rs(0)  = ID
Rs(1)  = Spg
Rs(2)  = svar a
Rs(3)  = svar b
Rs(4)  = svar c
Rs(5)  = svar d
Rs(6)  = svar

Og i formen er der:

<%
Response.write rs(1) & "<br><br>"
Response.write "<input type=""radio"" name=""V1"" value=""a"" checked> " & rs(2) & "<br>" & "<br>"
Response.write "<input type=""radio"" name=""V1"" value=""b"">" & rs(3) & "<br>" & "<br>"
Response.write "<input type=""radio"" name=""V1"" value=""c"">" & rs(4) & "<br>" & "<br>"
Response.write "<input type=""radio"" name=""V1"" value=""d"">" & rs(5) & "<br>" & "<br>"
%>

Jeg vil gerne selv forstå det..så hvis man nu har lavet sit vlag og har trykket svar...skal jeg så lave en ny side der f.eks. hedder nextquestion.asp som formen går til? Og denne siden laver så en session hvor den gemmer request.form?

Eller er jeg helt væk? Hav venligst lidt tålmodighed...er NY til ASP!
Avatar billede martin100 Nybegynder
18. januar 2005 - 23:01 #7
Og hvordan ville dette:

Session("brugersvar") = Session("brugersvar") + Request.Form("ID") + "|" + Request.Form("Svar")

Se ud, hvis jeg gik ud fra ovenstående?
Avatar billede cpufan Juniormester
18. januar 2005 - 23:03 #8
i formen laver du en
<input type="hidden" name="indsend" value="ok">


<% if request("indsend")="ok" then
session.contents(rs(spg))=request("V1")
end if
%>
rs(spg) ændrer sig jo så i takt med spgm
Avatar billede martin100 Nybegynder
18. januar 2005 - 23:08 #9
Prøver lige at se på det. Giv mig lige 5 min!
Avatar billede martin100 Nybegynder
18. januar 2005 - 23:12 #10
Hvordan laver jeg så en Response.Write "udskrive den session.contents jeg lige har lavet for at se hvad den gemmer?
Avatar billede softspot Forsker
18. januar 2005 - 23:15 #11
Hvis jeg tager udgangspunkt i mit eget forslag, så skal du tilføje en (skjult) kontrol som indeholder ID for det aktuelle spørgsmål, dvs. noget i stil med:

<%
Response.write rs(1) & "<br><br>"
Response.write "<input type=""hidden"" name=""ID"" value=""" & rs(0) & """>"
Response.write "<input type=""radio"" name=""V1"" value=""a"" checked> " & rs(2) & "<br>" & "<br>"
Response.write "<input type=""radio"" name=""V1"" value=""b"">" & rs(3) & "<br>" & "<br>"
Response.write "<input type=""radio"" name=""V1"" value=""c"">" & rs(4) & "<br>" & "<br>"
Response.write "<input type=""radio"" name=""V1"" value=""d"">" & rs(5) & "<br>" & "<br>"
%>

...og så kan jeg se at der har sneget sig en fejl ind i flg. sætning:

Session("brugersvar") = Session("brugersvar") + Request.Form("ID") + "|" + Request.Form("Svar")

Det skal naturligvis være.

Session("brugersvar") = Session("brugersvar") + "|" + Request.Form("ID") + "|" + Request.Form("Svar")

ellers bliver de nye ID ikke adskilt fra det tidligere svar :| - my bad...
Avatar billede cpufan Juniormester
18. januar 2005 - 23:16 #12
response.write session.contents("spgm som det lyder i db'en")
Avatar billede softspot Forsker
18. januar 2005 - 23:17 #13
Response.Write Session.Contents("brugersvar")
Avatar billede softspot Forsker
18. januar 2005 - 23:24 #14
Nu må jeg vist hellere tage mig sammen! :)

Det skal naturligvis se således ud med dine kontroller på formularen:

Session("brugersvar") = Session("brugersvar") + "|" + Request.Form("ID") + "|" + Request.Form("V1")
Avatar billede martin100 Nybegynder
18. januar 2005 - 23:25 #15
Softspot -> Jeg forstår ikke hvor du får Request.Form("Svar")
Jeg har ingen form der hedder svar? Mener du ikke + rs("0") ???
Avatar billede martin100 Nybegynder
18. januar 2005 - 23:29 #16
Hehe. Der fik du den lihe rettet!
Prøv at se: http://www.2mwebdesign.dk/atpl/random2.asp

Den udskriver da ikke værdierne som er blevet indtastet når jeg laver en <%Response.Write Session.Contents("brugersvar")%>

???
Avatar billede martin100 Nybegynder
18. januar 2005 - 23:34 #17
ARRGHH!! DOHHH!!! det virker..sorry! Men når man loader siden med første spørgsmål viser den jo ingen værdi? Og det spørgsmål kan jo ikke komme to gange? Forstår du mig? Så vil man jo hele tiden have et svar forkert?
Avatar billede softspot Forsker
19. januar 2005 - 16:59 #18
Jeps (tror jeg nok :))...

Du skal ikke lægge noget i Session("brugersvar") inden du har postet formularen for første gang. Det betyder at du skal checke om svarknap er trykket inden du lægger noget i Session("brugersvar"). Det kan du gøre som vist herunder:

If Request.Form("svarknap") = "svar" Then

  If Session("brugersvar") <> "" Then
    Session("brugersvar") = Session("brugersvar") + "|" + Request.Form("ID") + "|" + Request.Form("V1")
  Else
    Session("brugersvar") = Request.Form("ID") + "|" + Request.Form("V1")
  End If

End If

Jeg har også lige lagt et check på om der er noget indhold i Session("brugersvar") for at afgøre om der skal en pipe foran det første ID. Det har betydning for "alignment" af ID og svar...
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