Just nu i M3-nätverket
Gå till innehåll

Visa poäng ur ett och samma tema, inte flera


Martina

Rekommendera Poster

Hej

 

Har kodat en quiz-funktion på min hemsida, men det var lääänge sedan så den här koden är nästan rena grekiskan för mig, eftersom jag glömt mycket. Behöver därför mycket hjälp.. och pedagogisk sådan ;)

 

För att enklast förklara: man kan välja olika teman att svara på och hamnar därefter på en highscorelista. Problemet är att om man har samma namn på flera olika quiz (tema) plussas poängen ihop för samtliga quiz vilket gör att man på ett quiz kan få tex 15 poäng av 8 möjliga. Så vill jag självklart inte ha det! Den ska bara visa poängen från ett visst quiz till densammes topplista, men hur gör man det?

Har satt en spärr så man inte kan heta likadant i samma quiz, men vill gärna att en person ska kunna använda samma nick på två olika quiz.

 

Tror denna koden ska räcka för att visa hur det ser ut nu...

[log]<table width="850" height="100%" border="0" cellpadding="0" cellspacing="0">

<tr>

<%

sql = "SELECT * FROM tema WHERE tema_id =" & request.QueryString("tema_id") &";"

set rs2 = connect.execute(sql)

%>

 

<td valign="top" height="50" colspan="4" width="846"><div align="center">

<h3><%=rs2("tema_namn")%></h3>

<hr width="500" size="1" color="#000000">

</div></td>

</tr>

<tr>

<td valign="top" align="center" colspan="4" width="846">

<div class="bold">HIGHSCORES</div>

</td>

</tr>

 

<%

y=1

do while y <= rs.pagesize AND NOT rs.eof

%>

<tr>

<td width="205" valign="top"> 

</td>

<td valign="top" align="left" width="174">

<div class="bread"> <%=y%>. <%=rs("user_name")%></div>

</td>

<td valign="top" width="109">

<div class="bread"><%=rs("user_right")%> poäng</div>

</td>

</td>

<td width="352" valign="top">

<div class="bread"><%=rs("user_date")%></div></td>

</tr>

<%

y=y+1

rs.movenext

loop

%>[/log]

 

För att se hur quizen ser ut testa dem på www.martinaa.se under Quiz. Vore myyyycket tacksam för all hjälp!! :)

 

//Tina

 

LOG-taggar tillagda av moderator

 

[inlägget ändrat 2007-08-23 00:10:25 av Cluster]

Länk till kommentar
Dela på andra webbplatser

Nja, det behövs mer info om hur det ser ut på quiz.asp.

Om det är en väldigt lång fil så kan du maila den till c2[at]itmanagement.net

, posta den annars här inom [ LOG ]-taggar

 

Länk till kommentar
Dela på andra webbplatser

Okej, här kommer hela quiz.asp! :)

[log]<% session.LCID = 1053%>

<!-- #INCLUDE FILE="mall.asp" -->

<!-- #INCLUDE FILE="qanswer.js" -->

 

<%'Ansluter till databasen

Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.MapPath("quiz.mdb")

 

svar = request.QueryString("svar")

 

if svar = "ja" then

 

sql = "SELECT * FROM rost WHERE sessionid = "&session.SessionID&" AND fraga_id = "&request.Form("fraga_id")&";"

set rsk = connect.execute(sql)

 

if rsk.eof then

sql = "INSERT INTO rost(sessionid, svar_id, fraga_id) VALUES("& session.SessionID &", "& request.Form("svar") &", "& request.Form("fraga_id")&");"

connect.execute(sql)

else

sql = "UPDATE rost SET svar_id = "&request.Form("svar")&" WHERE fraga_id = "& request.Form("fraga_id") &" AND sessionid = "& session.SessionID &";"

connect.execute(sql)

session("fraga_nr") = session("fraga_nr") - 1

end if

end if

 

TemaId = request.QueryString("tema_id")

if TemaId = "" then

TemaId = Session("tema_id")

else

Session("tema_id") = TemaId

end if

%>

 

<form action="quiz.asp?svar=ja" onsubmit="return radiocheck();" method="post" name="quizanswer">

 

<br><br>

<table width="500" height="147" border="0" align="center" cellpadding="0" cellspacing="5">

<tr>

<%

sql = "SELECT max(fraga_nr) FROM fraga WHERE tema_id = "& TemaId &";"

set rsrakna = connect.execute(sql)

antalfragor = rsrakna(0)

 

if session("fraga_nr") = "" then session("fraga_nr") = 1

 

if request.QueryString("svar") = "ja" then

 

if session("fraga_nr") = antalfragor then

response.Redirect("quizslut.asp")

response.end()

else

session("fraga_nr") = session("fraga_nr") + 1

end if

end if

 

sql = "SELECT * FROM fraga WHERE tema_id=" & TemaId &" AND fraga_nr = "& session("fraga_nr") &";"

set rs = connect.execute(sql)

 

sql = "SELECT * FROM svar WHERE fraga_id =" & rs("fraga_id") & ";"

set rs2 = connect.execute(sql)

%>

<input type="hidden" name="fraga_id" value="<%=rs("fraga_id")%>">

<td colspan="3">

<div class="bold">

<%=rs("fraga_nr")%>.  

<%=rs("fraga_namn")%>  <em><%=rs("fraga_nr")%>/<%=antalfragor%></em><br><br>

</div>

</td>

 

</tr>

<%

do while not rs2.eof

%>

<tr>

<td width="26">

<input name="svar" type="radio" class="check" value="<%=rs2("svar_id")%>">

</td>

<td colspan="2">

<div class="bread">

<%=rs2("svar_namn")%>

</div>

</td>

</tr>

<%

rs2.movenext

loop

%>

<tr>

<td width="26"> 

</td>

<td width="338"> 

</td>

<td width="116"> 

<input type="submit" name="next" value="Nästa fråga">

</td>

</tr>

</table>

</form>

<% connect.close

set connect = nothing

%><!-- #INCLUDE FILE="mallner.asp" -->[/log]

 

LOG-taggar tillagda av moderator

 

[inlägget ändrat 2007-08-23 00:05:50 av Cluster]

Länk till kommentar
Dela på andra webbplatser

Fortfarande rätt rörigt. I ditt första inlägg (vilken fil är det?) visar du bara hur du hämtar recordsetet döpt rs2, men inte hur du hämtade rs-mängden.

 

Dessutom ser jag inte var du sparar användarnamnet någonstans. Att du sedan blandar in SessionID rör till det än mer, hade det inte räckt med enbart användarnamn och neka val av användarnamn om det redan finns i databasen?

 

EDIT: Problemet som jag ser det är att du i svarstabellen tycks använda sessionsId som unik identifierare för en respondent, medan du i topplistan använder användarnamn.

Det intressanta är alltså hur dina tabeller ser ut och vilka kriterier du använder när du hämtar/ändrar data ur dessa

[inlägget ändrat 2007-08-22 21:16:33 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Oj...förlåt mig! Jag visade visst fel kod... *sorry* Här kommer den med topplistan!

[log]<!-- #Include file="mall.asp" -->

<!-- #INCLUDE FILE="qanswer.js" -->

<%

'Ansluter till databasen

Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.MapPath("quiz.mdb")

visa = request.QueryString("visa")

if visa = "" then

visa = 10

nextvisa = "alla"

nextvisa_text = "alla"

end if

if visa = "alla" then

visa = 1000

nextvisa = "10"

nextvisa_text = "top 10"

end if

TemaId = request.QueryString("tema_id")

if TemaId = "" then

TemaId = Session("tema_id")

else

Session("tema_id") = TemaId

end if

 

sql = "SELECT user_name, user_right, user_date FROM user WHERE tema_id = " & TemaId &" ORDER BY user_right DESC"

set rs = server.CreateObject("ADODB.Recordset")

rs.cursortype = 1

rs.open sql, connect

rs.pagesize = visa

%>

<center>

<table width="850" height="100%" border="0" cellpadding="0" cellspacing="0">

<tr>

<%

sql = "SELECT * FROM tema WHERE tema_id =" & request.QueryString("tema_id") &";"

set rs2 = connect.execute(sql)

%>

 

<td valign="top" height="50" colspan="4" width="846"><div align="center">

<h3><%=rs2("tema_namn")%></h3>

<hr width="500" size="1" color="#000000">

</div></td>

</tr>

<tr>

<td valign="top" align="center" colspan="4" width="846">

<div class="bold">HIGHSCORES</div>

</td>

</tr>

 

<%

y=1

do while y <= rs.pagesize AND NOT rs.eof

%>

<tr>

<td width="205" valign="top"> 

</td>

<td valign="top" align="left" width="174">

<div class="bread"> <%=y%>. <%=rs("user_name")%></div>

</td>

<td valign="top" width="109">

<div class="bread"><%=rs("user_right")%> poäng</div>

</td>

</td>

<td width="352" valign="top">

<div class="bread"><%=rs("user_date")%></div></td>

</tr>

<%

y=y+1

rs.movenext

loop

%>

 

<tr>

<td valign="top" align="center" colspan="4" width="846"><br><br>

<form action="quser_add.asp" name="user" method="post">

<div class="bread">Skriv i ditt namn och starta:</div><br>

<% if request.QueryString("fel") = "namn" then response.write("<div class=""bold"">Namnet är redan upptaget, välj ett nytt</div><br>")%>

<input type="text" name="anvname" size="20" maxlength="30"> <br><br>

<input type="submit" name="go" value="Börja!" onClick="OnClick(); return false;"><br><br><br>

 

<div class="bread"><br>Hittills har <%=rs.recordcount%> personer deltagit i detta quiz.<br><br></div>

<a href="quizstart.asp?Tema_Id=<%=TemaId%>&visa=<%=nextvisa%>">Visa <%=nextvisa_text%></a>

<input type="hidden" name="tema_id" value="<%=request.QueryString("tema_id")%>">

</form>

</td>

</tr>

</table>

</center>

<% connect.close

set connect = nothing

%><!-- #Include file="mallner.asp" -->[/log]

 

Angående det du skrev... Hmm, som sagt länge sedan dessa quizen kodades och då som nu tog jag mycket hjälp av snälla människor här på forumet, så jag är inte så hemma i det där... längre... :(

 

Hoppas du kan bli lite klokare på den här koden nu då! :)

 

//Tina

 

Ps. Tusen tack för att du hjälper mig! :thumbsup:

 

 

LOG-taggar tillagda av moderator

 

[inlägget ändrat 2007-08-23 00:07:09 av Cluster]

Länk till kommentar
Dela på andra webbplatser

Tror det blir enklare om du bara zippar alla relevanta filer och mailar dem till mig, så fixar jag till det åt dig.

 

Det jag behöver verkar vara:

 

quizpick.asp

quizstart.asp

quser_add.asp

quiz.asp

samt databasen, quiz.mdb

 

 

 

Länk till kommentar
Dela på andra webbplatser

Hmm, nä, ingenting. Ditt mailprogram/antivirus-program kanske inte tillåter att du skickar asp-filer. Pröva att zippa ihop alla filer till en enda zip-fil, detta brukar inte antivirusprogrammen ha något emot.

 

Länk till kommentar
Dela på andra webbplatser

Det är det jag har gjort.

Har varit med om detta nån annan gång, att det tagit väldigt lång tid innan mailet kommit fram. Det har dykt upp typ dagen efter. Vi får sova på saken och se om tekniken fungerar bättre imorgon! ;)

 

Länk till kommentar
Dela på andra webbplatser

Hm, kunde inte somna så tittade igenom dina script och det var ganska lättlöst.

 

I filen quizslut.asp, ändra rad 85 till

		<% sql = "UPDATE user SET user_right = user_right + "& antalratt &" WHERE tema_id=" & Session("tema_id") & " AND user_name = '"& session("user_name") &"';"

 

Problemet var alltså att den tidigare räknade upp totalpoäng för en användare utan att ta hänsyn till vilken frågekategori det gällde (därav tillägget tema_id=" & Session("tema_id") & " AND )

 

 

 

Länk till kommentar
Dela på andra webbplatser

Aaaah! Tusen tack! :D:thumbsup:

 

 

Som jag skrev i mailet har jag en liten grej till jag skulle vilja fixa. Jag har en inloggningsfunktion där jag kan radera quizdeltagare (som tex har för mycket poäng ;P ). Där skulle jag vilja att jag ska kunna klicka på namnet i highscorelistan och få fram samma sida som man får när man avslutat quizet, det vill säga resultatet, och på så sätt se hur personen svarat, vad som var rätt och fel. Sparas det på något sätt så det går i överhuvudtaget, eller är det helt omöjligt??

 

Tacksam för svar! :)

 

Länk till kommentar
Dela på andra webbplatser

Ska se vad jag kan slänga ihop. Dock vet jag inte hur ditt admin-system ser ut (dvs. hur dina sidor kontrollerar att du är inloggad) så om jag kommer fram med ett kod-förslag så får du sedan komplettera det med den kod som behövs för att sköta autentiseringen.

 

Länk till kommentar
Dela på andra webbplatser

Inloggningsfunktionen är inte databas-baserad utan ligger bara som en kod i login.asp. Överst på alla admin-sidor har jag sedan:

 

<%if not session("status")="okej" then response.Redirect("login.asp")%>

 

That's it!

 

Jag får sedan upp en egen sida med alla quiz-deltagare (listor.asp), det är alltså inte samma som övriga ser när de ska delta i ett quiz!

 

Länk till kommentar
Dela på andra webbplatser

Ok. Här har du resultatet. Det är en enda sida, som visar en av tre tabeller:

- Alla användare. Klicka för att se dess kategorier

- Användarens besvarade kategorier. Klicka för att se svaren

- Användarens svar på en kategori

 

Har använt en del VBScript-klasser samt ett par hjälpfunktioner för rendering av tabeller, så det kanske ser konstigt ut ur din synvinkel. Men det kan vara en bra demonstration i vad man kan göra i VBScript.

 

Källkod:

http://rafb.net/p/3OGksM35.nln.html

 

Demo:

http://89.253.67.183/quiz/admin.asp

 

Länk till kommentar
Dela på andra webbplatser

Okej, det var inte illa, men inte alls som jag tänkt mig... =/

 

Nu kan jag logga in, klicka på ett quiz (tema) och få fram alla användare i en lista för bara just det quizet. Därifrån kan jag välja att radera användaren, men skulle alltså även vilja kolla deras resultat.

 

 

Min listor.asp-fil ser ut så här

 

[log]

<% session.LCID=1053%>

<%if not session("status")="okej" then response.Redirect("login.asp")%>

<!-- #Include File="admall.asp" -->

<%

'Ansluter till databasen

Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.MapPath("quiz.mdb")

%>

<html>

<head>

<title>Untitled Document</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script LANGUAGE="JavaScript">

<!--

function confirmSubmit()

{

var agree=confirm("Vill du verkligen radera den här deltagaren?");

if (agree)

return true ;

else

return false ;

}

// -->

</script>

</head>

 

<body>

<%

 

TemaId = request.QueryString("tema_id")

userId = request.QueryString("user_id")

 

sql = "SELECT * FROM tema WHERE tema_id=" & TemaId &";"

set rslista = connect.execute(sql)

%>

<table width="500" align="center">

<tr>

<td colspan="3" width="594">

<h3>Radera deltagare</h3>

<div class="bold">för quiz <%=rslista("tema_namn")%><br><br></div>

 

</td>

</tr>

 

<ol>

<%

sql = "SELECT * FROM user WHERE tema_id = " & TemaId &" ORDER BY user_right DESC"

set rs = connect.execute(sql)

 

do while NOT rs.eof

%>

<tr>

<td width="229" align="left" valign="top">

<li><div class="bread"><%=rs("user_name")%></div></li>

</td>

<td width="160">

<div class="bread"><%=rs("user_right")%> po&auml;ng</div>

</td>

<td width="197">

<a href="user_del.asp?user_id=<%=rs("user_id")%>&tema_id=<%=temaId%>" onclick="return confirmSubmit()">Radera deltagare</a>

</td>

</tr>

<%

rs.movenext

loop

%>

</ol>

<tr>

<td width="229"><br><br><a href="quizuser.asp">&lt;&lt; Tillbaka till topplistan</a>

</td>

</tr>

</table>

<br><br>

 

<%

Connect.close

set connect = nothing

%>

</body>

</html>

<!-- #Include File="admallner.asp" -->

[/log]

 

Om det går, annars får jag göra en ny sida och köra på det du gjort! :)

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...