/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Smart idé søges til forbedring af videnste~
Fra : Jakob Munck


Dato : 02-11-01 17:20

På min site har jeg adskillige videnstests, der er opbygget ganske primitivt
som forme, hvor man vælger alternative svarmuligheder i radiobuttoms og
derved sendes et antal point til en udregningsfuntion "svar.asp" og brugeren
får et antal points for sin besvarelse. Der anvendes ingen database, og det
vil jeg helst være fri for i denne forbindelse.

Koden for min form ser sådan ud (i uddrag):

..............
<FORM action="svar.asp" method=post>

<b>1. Hvornår skete de begivenheder, der kaldes for "den franske
revolution?"</b><br><br>
<INPUT name="spm01" type=radio value="101">1789<BR>
<INPUT name="spm01" type=radio value="100">1848<BR>
<INPUT name="spm01" type=radio value="100">1776<BR><BR>

<hr width="100%" size="1" color="000000">

<b>2. Hvad hed den første pave i historien?</b><br><br>
<INPUT name="spm02" type=radio value="100">Matthæus<BR>
<INPUT name="spm02" type=radio value="100">Sebastian<BR>
<INPUT name="spm02" type=radio value="101">Peter<BR><BR>

<hr width="100%" size="1" color="000000">

<b>3. Hvornår skete reformationen i Danmark?</b><br><br>
<INPUT name="spm03" type=radio value="100">1848<BR>
<INPUT name="spm03" type=radio value="100">1437<BR>
<INPUT name="spm03" type=radio value="101">1536<BR><BR>
.................

Men der er én meget vægsentlig mangel ved denne måde at lave en test på, og
det er, at jeg kun kan fortælle brugeren hvor mange svar han lavede
rigtigt/forkert, men ikke HVILKE svar der var de rigtige/forkerte. Det er en
stor svaghed.

Er der nogen der har en idé til hvordan jeg kan forbedre min kodning
således, at jeg kan registrere hvilke spørgsmål brugeren svarede forkert på,
og lave en udskrift af numrene på disse spørgsmål samtidig med at brugeren
ser sit samlede pointtal?

Det må kunne lade sig gøre, men hvordan?


v.h.
Jakob Munck





 
 
Anders Holbøll (02-11-2001)
Kommentar
Fra : Anders Holbøll


Dato : 02-11-01 19:21

Jakob Munck wrote:
>
> <b>1. Hvornår skete de begivenheder, der kaldes for "den franske
> revolution?"</b><br><br>
> <INPUT name="spm01" type=radio value="101">1789<BR>
> <INPUT name="spm01" type=radio value="100">1848<BR>
> <INPUT name="spm01" type=radio value="100">1776<BR><BR>
>
> Er der nogen der har en idé til hvordan jeg kan forbedre min
> kodning således, at jeg kan registrere hvilke spørgsmål brugeren
> svarede forkert på, og lave en udskrift af numrene på disse
> spørgsmål samtidig med at brugeren ser sit samlede pointtal?

Din kode har også det problem, at det er meget nemt at snyde (man kan jo
blot kigge i html-kilden).

Du kunne gøre noget i denne stil:
--- quiz.asp - start ---
<%
Dim Questions, Action
Questions = Array(_
Array("Hvorfor, hvorfor dit og hvorfor dat?", _
"Derfor", 1, "Blot fordi", 0, "Jamen, det går det jo ikke!", 0), _
Array("Hvornår skete de begivenheder, der kaldes " & _
"for ""den franske revolution?""", _
"1789", 1, "1848", 0, "1776", 0))
Action = LCase(Trim(Request("action")))

If (Action = "") Then
Response.Write "<form action=""quiz.asp"" method=post>"
Response.Write "<input type=hidden name=action value=check>"
For i = 0 To Ubound(Questions)
Question = Questions(i)
Response.Write "<b>" & Server.HtmlEncode(Question(0)) & _
"</b><br>" & vbCrLf
For j = 1 To Ubound(Question) Step 2
Response.Write "<input name=""a" & i & """ type=radio " & _
"value=""" & (j \ 2 + 1) & """>" & _
Server.HtmlEncode(Question(j)) & "<br>" & vbCrLf
Next
Response.Write "<br>" & vbCrLf
Next
Response.Write "</form>"
ElseIf (Action = "check") Then
For i = 0 To Ubound(Questions)
Question = Questions(i)
Response.Write "<b>" & Server.HtmlEncode(Question(0)) & _
"</b><br>" & vbCrLf
a = CLng("0" & Request("a" & i))
If (a = 0) Then
Response.Write "Dette sprøgsmål har du ikke svaret på<br>"
ElseIf (a < 0) And (a * 2 + 1 > Ubound(Question)) Then
Response.Write "Dette sprøgsmål har du svaret underligt på<br>"
ElseIf Question(a * 2) > 0 Then
Response.Write "Dette sprøgsmål har du svaret rigtigt på<br>"
Point = Point + Question(a * 2)
Else
Response.Write "Dette sprøgsmål har du svaret forkert på<br>"
End If
Response.Write "<br>"
Next
Response.Write "Så du fik ialt " & Point & "point."
Else
Response.Redirect "quiz.asp"
End If
%>
--- quiz.asp - end ---

--
Anders

Jakob Munck (02-11-2001)
Kommentar
Fra : Jakob Munck


Dato : 02-11-01 21:05

Det kalder jeg heftig kode. Hatten af for dig endnu en gang. Der manglede
lige en submit-knap, så kørte det. Så er det bare med at forsøge at forstå,
hvad der egentlig sker. Som jeg forstår det:

Du du har lavet 2 niveauer af arrays, der ligger inde i hinanden, og i hver
af de inderste arrays ligger ét spørgsmål og de dertil knyttede
svarmuligheder og points for disse svar. Men hvordan du så får spørgsmål,
svarmuligheder og points skildt fra hinanden igen, det forstår jeg ikke
rigtigt, så det må jeg nok lige studere lidt mere.....?

Tak for det.

v.h.
Jakob Munck



Jakob Munck (02-11-2001)
Kommentar
Fra : Jakob Munck


Dato : 02-11-01 21:15

Og så kan jeg se, at den ikke vil udskrive 0 hvis alle spørgsmål er besvaret
forkert. Hvorfor vil den ikke det?

Jakob




Anders Holbøll (02-11-2001)
Kommentar
Fra : Anders Holbøll


Dato : 02-11-01 21:30

Jakob Munck wrote:
>
> Og så kan jeg se, at den ikke vil udskrive 0 hvis alle spørgsmål
> er besvaret forkert. Hvorfor vil den ikke det?

Fordi variablen Point aldrig bliver sat til 0. Prøv at sætte Point = 0
øverst i scriptet.

--
Anders

Jakob Munck (04-11-2001)
Kommentar
Fra : Jakob Munck


Dato : 04-11-01 09:23

Hej Anders (og andre der måtte læse med),

nu har jeg studeret koden og forsøgt at udvikle den lidt. Jeg vil gerne
have, at den - når den udregner scoren - under hvert spørgsmål skriver det
rigtige svar inden den fortæller brugeren om han har svaret rigtigt eller
forkert. Det har jeg forsøgt at skrive ind i koden, men jeg har ikke de
nødvendige færdigheder for at få det til at virke. Her står der bare zz
der hvor det rigtige svar skulle have stået, og dette rigtige svar kan man
jo finde under spørgsmålene, idet det er det svar der har 1 efter sig.

Men hvordan får man testen til at udskrive netop dette svar som en variabel,
der hvor zz står nu ?


v.h.
Jakob Munck



Her er koden, der virker perfekt:


<%
Dim Questions, Action

point = 0

Questions = Array(_

Array("1. Hvad er en TFT-skærm?", _
"En flad skærm", 1,_
"Et underlag til tastaturet", 0,_
"En sort skærm", 0), _

Array("2. Hvad betyder ROM?", _
"Random One Memory", 0,_
"Read Only Memory", 1,_
"Relay Osxy Modem", 0), _

Array("3. Hvad betyder det at ""rebote"" en computer?", _
"At genstarte den", 1,_
"At installere ny software", 0,_
"At installere ny harddisk", 0), _

Array("4. Hvad er et Zip-drev?", _
"En straf for piratkopiering", 0,_
"En strømførende væske", 0,_
"Et eksternt lagringsmedium", 1), _

Array("5. Hvad er en ADSL-forbindelse?", _
"En hurtig internetforbindelse", 1,_
"En internetforbindelse, der går over vandet", 0,_
"En trådløs forbindelse", 0), _

Array("6. Hvad hed den første computer der anvendte mus?", _
"AltaVista", 0,_
"Macintosh", 1,_
"Microsoft", 0), _

Array("7. Hvad menes med at software er open source?", _
"At det ikke virker", 0,_
"At det er gratis", 0,_
"At koden kan ses og videreudvikles af alle", 1), _

Array("8. Hvordan måler man om en skærm er 17 tommer?", _
"I dybden", 0,_
"Diagonalt over billedfeltet", 1,_
"I højden", 0), _

Array("9. Hvad er et ""motherboard""?", _
"Det centrale kredsløb i computeren", 1,_
"En særlig slags diskette", 0,_
"En chip der styrer tastaturet", 0), _

Array("10. Hvilke af nedenstående styresystemer er gratis?", _
"Windows", 0,_
"Unix", 0,_
"Linux", 1))


Action = LCase(Trim(Request("action")))

If (Action = "") Then
Response.Write "<form action=""quiz.asp"" method=post>"
Response.Write "<input type=hidden name=action value=check>"
For i = 0 To Ubound(Questions)
Question = Questions(i)
Response.Write "<b>" & Server.HtmlEncode(Question(0)) & _
"</b><br>" & vbCrLf
For j = 1 To Ubound(Question) Step 2
Response.Write "<input name=""a" & i & """ type=radio " & _
"value=""" & (j \ 2 + 1) & """>" & _
Server.HtmlEncode(Question(j)) & "<br>" & vbCrLf
Next
Response.Write "<br>" & vbCrLf
Next
response.write "<center><input type='submit' value='Send'>"
response.write "&nbsp;<INPUT type='reset' value='Fortryd'></center>"
Response.Write "</form>"
ElseIf (Action = "check") Then
For i = 0 To Ubound(Questions)
Question = Questions(i)
Response.Write "<b>" & Server.HtmlEncode(Question(0)) & _
"</b><br>" & "Svar: " & zz & "<br>" & vbCrLf
a = CLng("0" & Request("a" & i))
If (a = 0) Then
Response.Write "Du har ikke svaret<br>"
ElseIf (a < 0) And (a * 2 + 1 > Ubound(Question)) Then
Response.Write "Dette spørgsmål har du svaret underligt på<br>"
ElseIf Question(a * 2) > 0 Then
Response.Write "<font class='lilla11'>Dit svar er rigtigt</font><br>"
Point = Point + Question(a * 2)
Else
Response.Write "Dit svar er forkert<br>"
End If
Response.Write "<br>"
Next
Response.Write "Du fik<font class='roed13b'> " & Point & " </font>point ud
af 10 mulige.<br><br><br><center><A
HREF='../../get2you.asp?mode=tests_viden'
target='_self'>Test-menu</a></center>"
Else
Response.Redirect "quiz.asp"
End If
%>



Anders Holbøll (04-11-2001)
Kommentar
Fra : Anders Holbøll


Dato : 04-11-01 12:08

Jakob Munck wrote:
>
> nu har jeg studeret koden og forsøgt at udvikle den lidt. Jeg vil
> gerne have, at den - når den udregner scoren - under hvert
> spørgsmål skriver det rigtige svar inden den fortæller brugeren
> om han har svaret rigtigt eller forkert.

Det kunne vel løses ved, at man hvor hvert sprøgsmål løber igennem alle
svarene og finder det svar, som giver flest point. Det er måske ikke det
mest optimale, men nu er der jo ikke så mange data. Du kunne jo også
lave datastukturen om, så den for hvert sprøgsmål indeholder nummeret på
det rigtige svar, i stedet for for hvert svar at indeholdet et point
antal. Det ville måske ikke være så fleksibelt, men hvis du ikke har
brug for fleksibiliteten, så kan det jo være ligegyldigt.

--
Anders

Jakob Munck (04-11-2001)
Kommentar
Fra : Jakob Munck


Dato : 04-11-01 13:24

Jeg kan bedst lide det med at tjekker hvert svar for hvilket, der giver
flest point, og det har jeg fået til at virke ved at udvide din kode en
smule sådan:

<%
.................
Next
response.write "<center><input type='submit' value='Send'>"
response.write "&nbsp;<INPUT type='reset' value='Fortryd'></center>"
Response.Write "</form>"
ElseIf (Action = "check") Then
For i = 0 To Ubound(Questions)
Question = Questions(i)

if Question(2) = 1 then
= 1
ElseIf Question(4) = 1 then
= 3
Else
= 5
End if

Response.Write "<b>" & Server.HtmlEncode(Question(0)) & _
"</b><br>" & "Svar: " & Server.HtmlEncode(Question()) & "<br>" & vbCrLf

a = CLng("0" & Request("a" & i))
If (a = 0) Then
Response.Write "Du har ikke svaret<br>"
ElseIf (a < 0) And (a * 2 + 1 > Ubound(Question)) Then
Response.Write "Dette spørgsmål har du svaret underligt på<br>"
ElseIf Question(a * 2) > 0 Then
Response.Write "<font class='lilla11'>Dit svar er rigtigt</font><br>"
Point = Point + Question(a * 2)
Else

.................
%>


Tak for din hjælp !

jm





Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408852
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste