22. juni 2005 - 21:09
Der er
21 kommentarer og 1 løsning
Split af et array
Hej.
Jeg har en session, som gemmer hvilket ID i databsen samt, hvilket spørgsmål der er taget og bliver udskrevet(repsonse.write) således:
|||9|d|10|b|11|c
Det vil sige at ril sprøgsmål nr 9 i DBén har brugeren svaret d osv.
Men hvordan splitter jeg den op? Så der kommer til at stå
9d
10b
11c
Så man til sidst kan sammenligne brugerens resultater med de rigtige svar?
Har prøvet således:
<%
123 = Session.Contents("brugersvar")
nu = Split(123,",")
Response.Write = nu
%>
se det eventuelt på
www.2mwebdesign.dk/atpl/martin.asp
Annonceindlæg fra Computerworld it-jobbank
1) Du kan ikke bruge 123 som en variabel – det vil altid blive opfattet som værende et tal. Brug noget andet, f.eks. abc. 2) Hvis det er er |-tegn som skiller de enkelte poster, så skal du splitte på dette teg og ikke på et komma som i din kode: abc = Session.Contents("brugersvar") nu = Split(abc, "|") 3) Når du har kørt Split så har du bagefter et array. For at få fat på de forskellige elementer i dette skal du angive et indeks: Response.Write nu(0) & "<br>" Response.Write nu(1) & "<br>" Response.Write nu(2) & "<br>" - eller sådan her: For index=LBound(nu) To Ubound(nu) Response.Write nu(index) & "<br>" Next
123 = Session.Contents("brugersvar") nu = Split(123,"|") spm = "" for i = 0 to ubound(123) spm = spm & 123(i) if i mod 2 = 0 then response.write spm & "<br>" spm = "" end if next
nå så med nielles komentar om variabel og tal in mente: varspm = Session.Contents("brugersvar") nu = Split(varspm,"|") spm = "" for i = 0 to ubound(varspm) spm = spm & varspm(i) if i mod 2 = 0 then response.write spm & "<br>" spm = "" end if next
Tak for svarene:
Prøv lige at kør:
http://www.2mwebdesign.dk/atpl/martin.asp Der er ca 15 spørgsmål som tages tilfældigt, men når der ikke er flere records i databsen hvad gør jeg så? Hvilken side skal den så gå til og hvordan?
Prøv at køre siden, så ser i hvad jeg mener!!
Kan man så når man har End opr records få den til at lave f.eks Response.redirect til f.esk en side med resultat.asp hvor man der sammenligner Databasens svar med Brugerens svar??
ja det kommer jo an på hvad du vil med det...... men noget ala: if ubound(varspm) = 29 then response.redirect ("resultatside.asp") ubound(varspm) = 29 er det samme som 15 spgm, da hvert spgm optager to pladser i arrayet, og arrayet starter ved 0.
du kan også lægge en taeller i session: if session.contents("taeller") = "" then session.contents("taeller") = 1 else session.contents("taeller") = session.contents("taeller")+1 end if if session.contents("taeller") = 15 then response.redirect("resultat.asp")
Okay se koden her: <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF"> <form method="post" action="martin.asp"> <% Set Conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.RecordSet") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath ("/_vti_log/atpl.mdb") Conn.Open DSN StrSQL = "Select * from spg" If Session("visID") <> "" then StrSQL = StrSQL & " WHERE ID NOT IN ("&Session("visID")&")" end if rs.Open StrSQL, Conn, 3, 1 RndMax = CInt(rs.RecordCount) If RndMax > 0 Then Randomize RndNumber = Int((Rnd * RndMax)) rs.Move RndNumber %> <% 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>" Session("brugersvar") = Session("brugersvar") & Request.Form("ID") + "|" + Request.Form("V1") %> Databasens svar: <% Session("databasesvar") = Session("databasesvar") & "|" & Rs(0) & "|" & rs(6) Response.Write Session.contents("databasesvar") %> <% if Session("visID") = "" then Session("visID") = rs("ID") else Session("visID") = Session("visID") & "," & rs("ID") end if rs.Close Set rs = Nothing Conn.Close Set Conn = Nothing %> <input type="hidden" name"indsend" value="ok"> <%If request("indsend")="ok" Then Session.Contents(rs(spg))=request(V1) End If %> <br>Brugerens svar: <%Response.Write Session.Contents("brugersvar") End If %> <br> <input type="submit" value="svar" name="svarknap"> <br> <br> </form> </body> </html> Hvordan får jeg den til at gå til en resultatside, når man har svaret på alle spørgsmålene?
<html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF"> <form method="post" action="martin.asp"> <% if session.contents("taeller") = "" then session.contents("taeller") = 1 else session.contents("taeller") = session.contents("taeller")+1 end if if session.contents("taeller") = 15 then response.redirect("resultat.asp") Set Conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.RecordSet") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath ("/_vti_log/atpl.mdb") Conn.Open DSN StrSQL = "Select * from spg" If Session("visID") <> "" then StrSQL = StrSQL & " WHERE ID NOT IN ("&Session("visID")&")" end if rs.Open StrSQL, Conn, 3, 1 RndMax = CInt(rs.RecordCount) If RndMax > 0 Then Randomize RndNumber = Int((Rnd * RndMax)) rs.Move RndNumber %> <% 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>" Session("brugersvar") = Session("brugersvar") & Request.Form("ID") + "|" + Request.Form("V1") %> Databasens svar: <% Session("databasesvar") = Session("databasesvar") & "|" & Rs(0) & "|" & rs(6) Response.Write Session.contents("databasesvar") %> <% if Session("visID") = "" then Session("visID") = rs("ID") else Session("visID") = Session("visID") & "," & rs("ID") end if rs.Close Set rs = Nothing Conn.Close Set Conn = Nothing %> <input type="hidden" name"indsend" value="ok"> <%If request("indsend")="ok" Then Session.Contents(rs(spg))=request(V1) End If %> <br>Brugerens svar: <%Response.Write Session.Contents("brugersvar") End If %> <br> <input type="submit" value="svar" name="svarknap"> <br> <br> </form> </body> </html>
22. juni 2005 - 22:15
#10
Det virker ikke helt. Prøv lige at kør siden igen. Har sat tæller til 5!
22. juni 2005 - 22:16
#11
Oppe i toppen tilføjer du et tjek lige efter at du har trukket de tilbageværende spørgsmål ud: StrSQL = "Select * from spg" If Session("visID") <> "" then StrSQL = StrSQL & " WHERE ID NOT IN (" & Session("visID") & ")" end if rs.Open StrSQL, Conn, 3, 1 if rs.eof then ' <---- Dette tjek Response.Redirect ikkeflerespoergsmaal.asp end if
22. juni 2005 - 22:18
#12
øhm, jeg kan ikke, for den har sat en cookie -så skal jeg lige slette den
22. juni 2005 - 22:19
#13
Sorry CHAMP! Fik det lige til at virke. men på resultat siden så skal den vel bare tage brugeren array og sammenligne med databasens array ikke?
22. juni 2005 - 22:21
#14
det virker da fint
22. juni 2005 - 22:24
#15
jo det kommer jo an på hvad du vil....... nielle's løsning er faktisk simplere mht til resultatsiden,
22. juni 2005 - 22:29
#16
rigtig = 0 for i = 0 to ubound(varspm) if varspm(i) = dbarray(i) then rigtig = rigtig + 1 next response.write "Antal rigtige svar: " & rigtig/2 du skal så bare oprette et array (med split) ligesom du gør med det andet array
22. juni 2005 - 22:30
#17
altså oprette et dbarray
22. juni 2005 - 22:40
#18
Nu er koden således og Nielle det passer ikke?? <%response.expires =0%> <% 'if session.contents("taeller") = "" then 'session.contents("taeller") = 1 'else 'session.contents("taeller") = session.contents("taeller")+1 'end if 'if session.contents("taeller") = 6 then response.redirect("resultat.asp") %> <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF"> <form method="post" action="martin.asp"> <% Set Conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.RecordSet") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath ("/_vti_log/atpl.mdb") Conn.Open DSN StrSQL = "Select * from spg" If Session("visID") <> "" then StrSQL = StrSQL & " WHERE ID NOT IN ("&Session("visID")&")" end if rs.Open StrSQL, Conn, 3, 1 if rs.eof then ' <---- Dette tjek Response.Redirect("resultat.asp") end if RndMax = CInt(rs.RecordCount) If RndMax > 0 Then Randomize RndNumber = Int((Rnd * RndMax)) rs.Move RndNumber %> <% 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>" Session("brugersvar") = Session("brugersvar") + "|" & Request.Form("ID") & Request.Form("V1") %> Databasens svar: <% Session("databasesvar") = Session("databasesvar") & "|" & Rs(0) & "|" & rs(6) Response.Write Session.contents("databasesvar") %> <% if Session("visID") = "" then Session("visID") = rs("ID") else Session("visID") = Session("visID") & "," & rs("ID") end if rs.Close Set rs = Nothing Conn.Close Set Conn = Nothing %> <input type="hidden" name"indsend" value="ok"> <%If request("indsend")="ok" Then Session.Contents(rs(spg))=request(V1) End If %> <br>Brugerens svar: <%Response.Write Session.Contents("brugersvar") End If %> <br> <input type="submit" value="svar" name="svarknap"> <br> <br> </form> </body> </html> Prøv selv siden igen!!
22. juni 2005 - 22:42
#19
Når der er EOF så skriver den: Response object error 'ASP 0156 : 80004005' Header Error /atpl/martin.asp, line 33 The HTTP headers are already written to the client browser. Any HTTP header modifications must be made before writing page content.
22. juni 2005 - 22:47
#20
Sorry skulle jo bare smide den over header!! Nu virker det!
22. juni 2005 - 22:52
#21
Ret: Session("brugersvar") = Session("brugersvar") + "|" & Request.Form("ID") & Request.Form("V1") - til: Session("brugersvar") = Session("brugersvar") & "|" & Request.Form("ID") & Request.Form("V1") - eller måske endda til: Session("brugersvar") = Session("brugersvar") & "|" & Request.Form("ID") & "|" & Request.Form("V1")
22. juni 2005 - 22:53
#22
Du kan også droppe dennr If: If RndMax > 0 Then .... - idet betingelsen nu altid vil være opfyldt.
Kurser inden for grundlæggende programmering