quiz maken
Dat gaat al lekker.
Nu zit ik met 1 probleem.
Ik heb reeds:
user systeem, om mee te doen.
quizzen...
enz.
Ik ben geen kei in php en heb de quiz zo goed en zo kwaad als het gaat in elkaar geplakt en geschreven. Omdat ik hier veel heb geleerd, leek het me leuk om te kijken hoe jullie een pokwis in elkaar zetten.
Ik ben nu zover dat ik een quiz aan kan maken, vragen erbij zet, vervolgens uitlees en weer in de datrabase stop, bij de oplossingen!
De goede antwoorden haal ik uit de vragen tabel, de oplossing zet ik er tegenover.
Nu ben ik op zoek naar een goede mogelijkheden om de scores bij te houden.
Voorbeeldquiz is te vinden op
http://www.jojosloft.nl/quiz
Wie helpt ons mee?
als hij het fout heeft zegt hij jammer probeer het opnieuw :P
hier is het scriptje:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
$db = $db_tbl;
$sql = "SELECT antwoord FROM lvl AS l, HetVaagSpel AS h WHERE h.id='".$_SESSION['user_id']."' AND h.lvl = l.lvlid";
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);
$ans = $_POST['ans'];
$ans = mysql_real_escape_string($ans);
$ans1 = $row['antwoord'];
if ($ans == $ans1)
{
$sqb = "SELECT punten FROM $db WHERE id='".$_SESSION['user_id']."'";
$resulta = mysql_query($sqb) or die(mysql_error());
$rowa = mysql_fetch_assoc($resulta);
$punten = $rowa['punten'];
$puntennieuw = $punten+1;
$sqa = "UPDATE $db SET punten = '$puntennieuw' WHERE id='".$_SESSION['user_id']."'";
mysql_query($sqa) or die(mysql_error());
$sqc = "SELECT lvl FROM $db WHERE id='".$_SESSION['user_id']."'";
$resultb = mysql_query($sqc) or die(mysql_error());
$rowv = mysql_fetch_assoc($resultb);
$lvl = $rowv['lvl'];
$lvlnieuw = $lvl+1;
$sqd = "UPDATE $db SET lvl = '$lvlnieuw' WHERE id='".$_SESSION['user_id']."'";
mysql_query($sqd) or die(mysql_error());
echo "$check_succes <br />";
echo " $check_succes1 $puntennieuw $check_succes3 <br />";
echo " $check_succes2 $lvlnieuw .";
}
else
{
echo "$check_fail";
}
?>
$db = $db_tbl;
$sql = "SELECT antwoord FROM lvl AS l, HetVaagSpel AS h WHERE h.id='".$_SESSION['user_id']."' AND h.lvl = l.lvlid";
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);
$ans = $_POST['ans'];
$ans = mysql_real_escape_string($ans);
$ans1 = $row['antwoord'];
if ($ans == $ans1)
{
$sqb = "SELECT punten FROM $db WHERE id='".$_SESSION['user_id']."'";
$resulta = mysql_query($sqb) or die(mysql_error());
$rowa = mysql_fetch_assoc($resulta);
$punten = $rowa['punten'];
$puntennieuw = $punten+1;
$sqa = "UPDATE $db SET punten = '$puntennieuw' WHERE id='".$_SESSION['user_id']."'";
mysql_query($sqa) or die(mysql_error());
$sqc = "SELECT lvl FROM $db WHERE id='".$_SESSION['user_id']."'";
$resultb = mysql_query($sqc) or die(mysql_error());
$rowv = mysql_fetch_assoc($resultb);
$lvl = $rowv['lvl'];
$lvlnieuw = $lvl+1;
$sqd = "UPDATE $db SET lvl = '$lvlnieuw' WHERE id='".$_SESSION['user_id']."'";
mysql_query($sqd) or die(mysql_error());
echo "$check_succes <br />";
echo " $check_succes1 $puntennieuw $check_succes3 <br />";
echo " $check_succes2 $lvlnieuw .";
}
else
{
echo "$check_fail";
}
?>
AUB geen commentaar over dat k steeds eerst de POST in een variable zet dat is gewoon mijn style..
eerst had ik het antwoord nog ge md5'ed maar nu doet mijn serer vaag en berekent ja de ene kaar als 534eru34 bijv en de andere keer als 534eur43 dus dat spoort niet :P
die dingen als $check_fail enzo komt uit mijn lang file :P
Gewijzigd op 01/01/1970 01:00:00 door Nicoow Unknown
Hou met microtime bij hoe lang een user er over doet over antwoorden, zorg voor een totaaltijd van alle antwoorden. (ik weet niet of je vragen per pagina hebt, of vragen allemaal op 1 pagina, misschien ff test account maken voor ons hier)
Geeft per vraag ook een moeilijkheidsgraad, voor de punten. Een heel simpele/ algemeen bekende vraag geef je een lagere moeilijkheidsgraad, en die telt dus ook minder.
Per vraag krijg je dan bijv: $punten[$vraagnummer]=1*$moeilijkheidsgraad[$vraagnummer];
(dit geeft bijvoorbeeld: $punten[1]=1*4;)
Uiteindelijk tel je alle punten bij elkaar op, en die zet je samen met je microtime in een tabel, waarin je de volgende kolommen hebt:
user_id
quiz_id
punten
tijdsduur
Deze kan je dan vervolgens ook weer uitlezen, en je kan ook een topscorelijst maken door eerst te sorteren op punten en vervolgens op tijdsduur. Zo krijg je een (redelijk) eerlijke weergave, waarbij iemand met "trager internet" licht in het nadeel is.
En commentaar geven doek niet zo snel...
Ik ga het straks meteen bekijken!
grtz
Jojo
PS Ik zal vanavond ff kijken of ik een test quiz kan aanmaken, met code enzo.
Gewijzigd op 01/01/1970 01:00:00 door johan slaghuis
Quote:
Helaas, ik geef hier ondanks jouw verzoek tóch commentaar op: Het is volkomen zinloos, overbodig en het zorgt gegarandeerd voor problemen. Leer dit dus af!AUB geen commentaar over dat k steeds eerst de POST in een variable zet dat is gewoon mijn style..
Je stopt data uit de ene variabele in een andere variabele wanneer er iets verandert aan de data.
Hoe je het wel aanpakt:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
// configuur de variabelen die je gaat gebruiken:
$ans = ''; // hele vreemde naam, maar goed...
// verderop in je script:
$ans = mysql_real_escape_string($_POST['ans']);
?>
// configuur de variabelen die je gaat gebruiken:
$ans = ''; // hele vreemde naam, maar goed...
// verderop in je script:
$ans = mysql_real_escape_string($_POST['ans']);
?>
$ans heeft nu een andere inhoud dan $_POST['ans'], hier kan nooit enige onduidelijkheid over ontstaan.
De namen $ans en $-POST['ans'] klinken mij wat vreemd in de oren, Ans klinkt als een voornaam en dat kan nooit goed zijn als een naam voor een formulierveld. Je komt dan in de problemen met andere namen. $sVoornaam en $_POST['voornaam'] zijn algemeen en altijd bruikbaar bij voornamen. De 's' in $sVoornaam staat voor 'string', dan weet je ook wat voor type data er in deze variabele staat.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
en ik zal het proberen af te leren :P
maar k vind het gewoon makkelijker werken maar het klopt er kan meer fout gaan..
Gewijzigd op 01/01/1970 01:00:00 door Nicoow Unknown
Ik heb nu een query geschreven die de score update.
Na het submitten van de form. Gewoon in de quiz pagina, na de insert query.
Het optellen heb ik met de query gedaan.
zo: update oplossing set score = score + 1 WHERE name = '$gebruikersnaam' and quiz_id = $id
werkt goed. Thnx
tav Robert
alle vragen staan op 1 pagina, maar het lijkt me ook wel leuk om per vraag een pagina te hebben. Je kunt dan met vraagtijd en totale tijd enz gaan werken neem ik aan? Ik zal me er eens in gaan verdiepen. Er zijn nog geen levels voor de vragen, maar ook dat is een leuk idee. Moeten we eens met de bedenkers van de vragen (waaronder ikzelf) over hebben. Nu doen we maar wat.
De testaccount is aangemaakt.
Gebruikersnaam: phphulp
Wachtwoord: quiz123
Nogmaals dank
Jo
Warning: Division by zero in /www/htdocs/jojoslof/quiz/uitslag2.php on line 30
Warning: Division by zero in /www/htdocs/jojoslof/quiz/uitslag2.php on line 31
doet het nog niet helemaal goed zie k wel :P
Ik moet regelen dat - ie niks kleest als er nog niets in de datbase staat...hmmm
ast goed is moet ut nu werken.
:))
jo
yup.... hier doetieut.
Gewijzigd op 01/01/1970 01:00:00 door johan slaghuis
Kom er niet helemaal uit.
Als alle vragen in 1 pagina staan, die de database vult met submit, hoe krijg ik dan gemeten hoelang de quizzer erover doet? Ik wil graag een begin en eindtijd opslaan.
Dat lukt me niet goed.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?
$id = 5;
if ($Submit) {
$name = addslashes($name);
$q1 = addslashes($q1);
mysql_db_query("$db", "INSERT INTO oplossing1 (name,quiz_id,datum,q1) VALUES
('$name','$quiz_id', now(),'$q1')");
$inserted_id = mysql_insert_id();
$result = mysql_db_query ($db, "select * from vragen where quiz_id = $id and vraagnr = '1'");
$goed = mysql_result ($result, $i, "goed");
if ($goed == $q1) {mysql_db_query($db,"update oplossing1 set score = score + 1 WHERE name = '$gebruikersnaam' and quiz_id = $id");}
header("location: uitslag2.php");
}
?>
<form method="post" enctype="multipart/form-data" action="<?=$PHP_SELF?>" >
<input type="hidden" name="name" value="<?=$gebruikersnaam?>">
<?
$result = mysql_db_query ($db, "select * from vragen where quiz_id = $id and vraagnr =1");
$numOfRows = mysql_num_rows ($result);
if ($numOfRows)
{
for ($i = 0; $i < $numOfRows; $i++)
{
$vraag_id = mysql_result ($result, $i, "id");
$quiz_id = mysql_result ($result, $i, "quiz_id");
$vraag = mysql_result ($result, $i, "vraag");
$vraagnr = mysql_result ($result, $i, "vraagnr");
$antw1 = mysql_result ($result, $i, "antw1");
$antw2 = mysql_result ($result, $i, "antw2");
$antw3 = mysql_result ($result, $i, "antw3");
$antw4 = mysql_result ($result, $i, "antw4");
$vraag=stripslashes($vraag);
$vraagnr=stripslashes($vraagnr);
$antw1=stripslashes($antw1);
$antw2=stripslashes($antw2);
$antw3=stripslashes($antw3);
$antw4=stripslashes($antw4);
$a = $vraagnr;
echo " <tr>
<td class=\"tabs\">Vraag $vraagnr: $vraag<br><br>
</td></tr>
<tr><td>
<input type=\"radio\" name=\"q$a\" value=\"$antw1\">
$antw1 <br>
<input type=\"radio\" name=\"q$a\" value=\"$antw2\">
$antw2<br>
<input type=\"radio\" name=\"q$a\" value=\"$antw3\">
$antw3<br>
<input type=\"radio\" name=\"q$a\" value=\"$antw4\">
$antw4</td>
</tr><tr><td><br></td></tr>";
}
}
?><tr><td><input type="hidden" name="quiz_id" value="<?=$quiz_id?>">
<input type="submit" name="Submit" value="Stuur op!!">
</form></td></tr>
</table>
</body>
</html>
$id = 5;
if ($Submit) {
$name = addslashes($name);
$q1 = addslashes($q1);
mysql_db_query("$db", "INSERT INTO oplossing1 (name,quiz_id,datum,q1) VALUES
('$name','$quiz_id', now(),'$q1')");
$inserted_id = mysql_insert_id();
$result = mysql_db_query ($db, "select * from vragen where quiz_id = $id and vraagnr = '1'");
$goed = mysql_result ($result, $i, "goed");
if ($goed == $q1) {mysql_db_query($db,"update oplossing1 set score = score + 1 WHERE name = '$gebruikersnaam' and quiz_id = $id");}
header("location: uitslag2.php");
}
?>
<form method="post" enctype="multipart/form-data" action="<?=$PHP_SELF?>" >
<input type="hidden" name="name" value="<?=$gebruikersnaam?>">
<?
$result = mysql_db_query ($db, "select * from vragen where quiz_id = $id and vraagnr =1");
$numOfRows = mysql_num_rows ($result);
if ($numOfRows)
{
for ($i = 0; $i < $numOfRows; $i++)
{
$vraag_id = mysql_result ($result, $i, "id");
$quiz_id = mysql_result ($result, $i, "quiz_id");
$vraag = mysql_result ($result, $i, "vraag");
$vraagnr = mysql_result ($result, $i, "vraagnr");
$antw1 = mysql_result ($result, $i, "antw1");
$antw2 = mysql_result ($result, $i, "antw2");
$antw3 = mysql_result ($result, $i, "antw3");
$antw4 = mysql_result ($result, $i, "antw4");
$vraag=stripslashes($vraag);
$vraagnr=stripslashes($vraagnr);
$antw1=stripslashes($antw1);
$antw2=stripslashes($antw2);
$antw3=stripslashes($antw3);
$antw4=stripslashes($antw4);
$a = $vraagnr;
echo " <tr>
<td class=\"tabs\">Vraag $vraagnr: $vraag<br><br>
</td></tr>
<tr><td>
<input type=\"radio\" name=\"q$a\" value=\"$antw1\">
$antw1 <br>
<input type=\"radio\" name=\"q$a\" value=\"$antw2\">
$antw2<br>
<input type=\"radio\" name=\"q$a\" value=\"$antw3\">
$antw3<br>
<input type=\"radio\" name=\"q$a\" value=\"$antw4\">
$antw4</td>
</tr><tr><td><br></td></tr>";
}
}
?><tr><td><input type="hidden" name="quiz_id" value="<?=$quiz_id?>">
<input type="submit" name="Submit" value="Stuur op!!">
</form></td></tr>
</table>
</body>
</html>
Wat te doen?
De pagina verwijst naar uitslag pagina, die de resultaten toont.
Gewijzigd op 01/01/1970 01:00:00 door johan slaghuis
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?
session_start();
$_SESSION['begintijd'] = time();
// Hele quiz
$_SESSION['eindtijd'] = time();
$tijdsduur = ($_SESSION['eindtijd'] - $_SESSION['begintijd']) / 60;
echo $tijdsduur. " minuten";
?>
session_start();
$_SESSION['begintijd'] = time();
// Hele quiz
$_SESSION['eindtijd'] = time();
$tijdsduur = ($_SESSION['eindtijd'] - $_SESSION['begintijd']) / 60;
echo $tijdsduur. " minuten";
?>
Even geedit voor hieronder
Gewijzigd op 01/01/1970 01:00:00 door Thijs X
Hewb alleen de time veranderd in mktime, en gedeeld door -60.
Anders kreeg ik negatieve tijd...
johan schreef op 21.02.2007 14:14:
Thnx datw erkt.
Hewb alleen de time veranderd in mktime, en gedeeld door -60.
Anders kreeg ik negatieve tijd...
Hewb alleen de time veranderd in mktime, en gedeeld door -60.
Anders kreeg ik negatieve tijd...
Ja klopt had typo gemaakt moest zijn:
jij had wrss eerst starttijd-eindtijd.. dan krijg je altijd een negatief getal..
Heb de code nu aangepast.
thnx
De blinde
die werd geholpen door de lamme....lol
NU verder met het weeknr.
Gewijzigd op 01/01/1970 01:00:00 door johan slaghuis
Nu willen we graag dat de weeknummers beschikbaar komen.
Er is nu sprake van een vast quiz id.
De id bepaald welke quiz wordt getoont.
We willen dat koppelen aan een weeknummer, iedere twee weken een quiz.
Ik heb verschillende kalenders e.d. bekeken, maar kom er niet uit hoe je nu psies een weeknummer ophaalt.
iemand een eenvoudig te implementeren scriptje?
Onderstaande SQL geeft het weeknummer uitgaande van dat maandag de 1e dag van de week is. Door '%u' te wijzigen in '%U' (hoofdletter) gaat MySQL ervan uit dat zondag de 1e dag van de week is. Aan jou dus de keuze.
%U Week (00..53), where Sunday is the first day of the week
%u Week (00..53), where Monday is the first day of the week
Ik ben der mee aan de slag.
De tijd wordt niet in een datetime veld opgeslagen.
Het gaat om de tijdsduur (zie boven). Ik sla de tijdsduur gewoon op in varchar en reken vervolgens uit hoelang iemand over de quiz gedaan heeft.
Het opslaan van de datum snap ik, ik sla de datum dat gespeeld wordt op in de database met now().
dus wil ik zoiets als :
als now() in week twee valt, laat dan quiz 2 zien,
als now() in week drie valt, laat dan quiz 2 zien,
als now() in week 4 valt, laat dan quiz 3 zien enz enz.
Hoe doek dat?
Ik klus verder...
en thnx alvast
Die tip over de moeilijkheidsgraad nemen we ook mee!
Dat is mooi, dat je die tip nog mee neemt.
Wat betreft die nummers van de quizen:
- Als je 2 jaar bezig bent, dan kom je op quiz 104 uit (2x52 weken -> 52 quizen)
- Zet in je tabel waarin je je quizid/naam enzo opslaat een veld met daarin ook een datum.
Vervolgens kan je met onderstaande vergelijken welke quiz er moet worden opgehaald.
Edit:
Wat je doet met het opslaan van je tijdsduur, in wat voor format sla je dat op? Volgens mij is dat een unix timestamp (aantal seconden sinds Unix Epoch (January 1 1970 00:00:00 GMT) daarvoor kan je beter een timestamp veld gebruiken!
Wat je doet met het opslaan van je tijdsduur, in wat voor format sla je dat op? Volgens mij is dat een unix timestamp (aantal seconden sinds Unix Epoch (January 1 1970 00:00:00 GMT) daarvoor kan je beter een timestamp veld gebruiken!
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
Ik sla het op als hate getal wat weergegeven wordt door de code die thijs hier opgaf.
De pagina geeft de begin en eindtijd op. Het verschil zet - ie in de database.
werkt prima en is uitstekend om te gebruiken bij gelijk spel in punten.
wat is het voordeel van jou methode?
en betr. de weeknrs
Ik heb een tabel met
id
naam
toegevoegd
bijgewerkt
daar worden de quizzen in opgeslagen en krijgen een id. Vervolgens kan ik er vragen aan toevoegen (tabel vragen) en antwoorden (tabel oplossingen)
we werken straks met meer mensen aan de vragen. dus is het handig dat in de quizzen ook naam toevoeger/bijwerker opgeslagen kan worden en wanneer dat gebeurd.
ik wilde het weeknummer daarin ook opslaan, gewoon door het cms ingegeven en het verolgens vergelijken met het opgevraagde weeknr. en dan zo de juiste quiz weergeven, ik kan dus nog een datum toevoegen, bv datum online en dan die gebruiken voor het weeknr?