Grundgedanken zu einem Quiz - Sessions...

Eistee

Erfahrenes Mitglied
Hi,
ich möchte auf unserer Seite ein kleines Quiz in PHP realisieren.
Das ganze soll so funktionieren, dass dem jeweiligen Nutzer einige Fragen gestellt werden, bis er - sagen wir 5 - falsche Antworten gegeben hat.
Es sollen Multiple-Choice fragen sein.
Die Fragen sollen in 4? Schwierigkeitsstufen eingeteilt sein, wobei dem Nutzer aus jedem Level 10 zufällig gewählte Fragen gestellt werden. Die Fragen sollen aus einer Datenbank geladen werden. Für jede richtige Frage bekommt der Nutzer Punkte gutgeschrieben. Die besten Spieler sollen später + erreichte Punktzahl extra gelistet werden. Soweit eigentlich kein problem ;-)

Mein eigentliches Problem liegt darin, wie ich das mit den Punkten habdhabe.
Ich hatte mir überlegt, dass es doch über Sessions möglich sein müsste, den Fortschritt und den Namen des Spielers für die Dauer des Spiels zu speichern und die entsprechenden daten, nach ende des Quizes in die DB zu schreiben. Leider habe ich noch nie mit Sessions gearbeitet (ich habs einfach noch nicht gebraucht :) ) und daher eigentlich überhaupt keinen Plan, wie ich sowas realisieren könnte.
Ich wäre euch sehr dankbar, wenn ihr mir anhand meines Beispiels, möglichste ausführlich, einige Lösungswege beschreiben könntet. Bitte so, dass es auch ein "Session-Neuling" versteht ;)

Danke!
 
Zuletzt bearbeitet:
Such dir doch einfach mal ein Anfänger-Tutorial über Sessions raus - und aus ;-)
Für dein Vorhaben solltest du nicht mehr als Sessions starten, Variablen speichern und evtl. Sessions killen können - das hast du in fünf Minuten herausen.
 
Dann wäre es zumindest hildreich, wenn du mir ein gutes Tutorial zu Sesions empfehlen könntest :)
Hier im Board hab ich noch nix brauchbares gefunden und die Einleitung auf php.net ist auch kein echtes Tutorial...
 
Hi,

du solltest 2 Sessionvariablen haben. Also 1. Name und 2. Punkte.
Die speicherst du einfach. Immer wenn einer einen Punkt dazu bekommt, musst du die Punktevariable + Punkte machen und wiederrum als Punktevariable speichern.

Hoffe einigermaßen verständlich :), falls nicht, kannst du mir ja schreiben. Mir ist gerade voll langweillig. Könnte ne kleine Nachhilfestunde geben ;). icqnummer: 170504286

mfg
DarkManX
 
Sessions sind überhaupt nicht kompliziert. Du speicherst Daten in Variablen ab, genau so, wie Du es sonst auch tust. Nur mit dem unterschied, dass diese Variablen und deren inhalte beim Wechsel zwischen den verschiedenen Seitenaufrufen erhalten bleiben. Um mit Sessions arbeiten zu können, rufst Du zu Beginn Deines Scriptes die Funktion [phpf]session_start[/phpf] auf. Nun kannst Du Deine Variablen im superglobalen Session-Array ($_SESSION) ablegen, bzw. sie dort wieder heraus holen. Um den Rest kümmert sich PHP.

Mehr Informationen gibt es hier:
--> http://de.php.net/manual/de/ref.session.php
 
Denke ma, ich bekomm das mit den Sessions schon irgendwie hin...
Da stellt sich mir aber noch eine andere Frage:
Das Script soll zunächst aus zwei Dateien bestehen (zwei, weill ich die Dateien in den Rest der Site include, mit mehr Dateien würde es noch unübersichtlicher ;) )
In der ersten Datei (start.php) gibt der User seinen Namen ein und klickt dann auf einen Button, der die zweite Seite öffnet und das Spiel starten soll.
Wie bekokomme ich es nun hin, dass auf dieser einen Seite das gesamte Quiz abläuft?
Es soll eine frage gestellt werden, wenn diese beantwortet wurde, wird die nächste gestellt usw.
Wie stell ich das an?
Die Fragen sollen aus einer DB geladen werden.
 
Du speicherst die IDs aller Fragen in der Session ud nach jeder Antwort ziehst du eine Davon ab. Das geht so:

Mit
Code:
SELECT
  id
FROM
  fragen;
holst du dir alle Fragen-IDs und schreibst die in einen Array in die Session:

PHP:
$_SESSION['frage_ids'] = $arrayausderdb;

Dann machst du nach jeder beantworteten Frage:

PHP:
$id = array_pop($_SESSION['frage_ids']);
$sql = "SELECT
                  frage,
                  antwort
                  sonstwas
              FROM
                  fragen
              WHERE
                  id = '$id';";
Und mit der Abfrage holst du dir dann immer eine Antwort. Das array_pop ist hier beschrieben: http://www.php.net/array_pop
 
Das hat mir schon mal geholfen :)
Allerdings kann ich mir noch nicht vorstellen, wie ich das alles in einer datei realisieren.
D.h.: Sobald eine Frage beantwortet wurde, soll die nächste angezeigt werden.
Wie setze ich das mit der von dir beschriebenen Methode um?
 
Ich hab heut mal ein wenig rumprobiert und versucht meine Gedankenblockade zu überwinden... ;)
Folgendes ist dabei rausgekommen:

Die Struktur der vorläufigen Tabelle könnt ihr dem Anhang entnehmen.
Das Feld Status soll indizieren, ob eine Frage bereits gestellt wurde.
Der Rest sollte soweit selbsterklärend sein ;)

Nun zu meinen ersten Versuchen das eigentliche Script zu coden... :-(
PHP:
<form action="?open=quiz&action=play" name="quiz" id="quiz">
              <?php
$res = mysql_connect("localhost", "XXX", "XXX");
if (!$res)
{
	echo "Kann z.Z. keine Verbindung zum Datenbankserver aufbauen.\n";
	exit;
}
mysql_select_db("alkbrueder_de");

$sqlab = "SELECT * FROM quiz WHERE level = '3' && status != 0 ORDER BY RAND() LIMIT 1";
$res = mysql_query($sqlab);
$row = mysql_fetch_array($res);

$sqlab = "UPDATE quiz SET status = '0' WHERE id = ".$row[id];
mysql_query($sqlab);
?>
...
</form>

Das ganze befindet sich in der datei quiz.php welche in die Datei index.php "includet" wird.
Nun soll das Script im ersten Schritt einfach einen zufälligen Datensatz aus der DB holen und mir die Frage, sowie die Antworten ausgeben - DAS funktioniert auch.
Nun zum ersten Problem:
Das Status-Feld in der DB wird nicht auf 0 gesetzt - warum?
Ausserdem:
Eigentlich sollte, nachdem ich eine Antwort angeklickt habe, das Formular abgeschickt werden und mir eine weitere Frage gestellt werden. Statt dessen werde ich aber auf die Seite index.php weitergeleitet und in der url taucht etwas in dieser Form auf:
Code:
http://www.alkbrueder.de/?sent=1&answer=answer4
("sent" ist ein verstecktes Feld mit dem Wert "1")
Warum funktioniert das nicht?

Ich schicke das Formular ab, sobald ein Radiobutton angewählt wurde:
Code:
<input type="radio" name="answer" value="answer1" onclick="document.quiz.submit();">

Was mache ich falsch?
 

Anhänge

  • structure.jpg
    structure.jpg
    59,4 KB · Aufrufe: 67
Zurück