Met een aantal companen heb ik het idee opgevat om een popkwis in elkaar te draaien.
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?
k ben ok met een script bezig en k heb dan een checkans.php die bij de if kijkt of het antwoord goed is,, en als het goed is update hij het level en punten aantal..
als hij het fout heeft zegt hij jammer probeer het opnieuw :P
hier is het scriptje:

<?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";
}
?>

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
Om scores bij te houden:

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.
Cool...thnx...
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.
AUB geen commentaar over dat k steeds eerst de POST in een variable zet dat is gewoon mijn style..
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!

Je stopt data uit de ene variabele in een andere variabele wanneer er iets verandert aan de data.

Hoe je het wel aanpakt:
<?
// 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.
hmm $ans is gewoon een afkorting van answer en dat is weer een vertaling voor het woord antwoord voor zover ik weet..
en ik zal het proberen af te leren :P
maar k vind het gewoon makkelijker werken maar het klopt er kan meer fout gaan..
Dank voor de snelle reacties! Inspirerend. Slecht voor de relatie...lol.
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: mysql_result(): Unable to jump to row 0 on MySQL result index 9 in /www/htdocs/jojoslof/quiz/uitslag2.php on line 19

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 zie het.
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.
Ben bezig geweest met de tijd.
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.

<?

$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.
je zou de begin tijd ine en sessie kunne opslaan en de eindtijd ook wanneer alles in ingevoerd en die van elkaar afhalen = tijd dat je erover hebt gedaan

<?
session_start();
$_SESSION['begintijd'] = time();

// Hele quiz

$_SESSION['eindtijd'] = time();

$tijdsduur = ($_SESSION['eindtijd'] - $_SESSION['begintijd']) / 60;

echo $tijdsduur. " minuten";
?>

Even geedit voor hieronder

Reageren