Ein Quiz programmieren

Hallo!

Ich soll für ein Schulprojekt ein Quiz in PHP programmieren. Eines Vorweg: Ich will (momentan ^^) keinen fertigen Quellcode von euch, etwas selber denken schadet nicht. Fragen habe ich trotzdem einige. Ich muss ein Pflichtenheft und ein Lastenheft machen, hat zwar überhaupt keinen Sinn, aber der Professor will es so :rolleyes:
Bis nächsten Mittwoch muss das fertig sein und da muss ja drinnen stehen was das Programm später alles können soll. Ideen habe ich genug, nur weiß ich nicht inwiefern und wie leicht sie sich verwirklichen lassen mit PHP, daher würde ich gerne von euch wissen was ihr von folgenden Ideen haltet:
  • Am Ende des Quizes (~10-20 Fragen) kommt eine Auswertung mit % richtig und % falsch.
  • Highscoreliste, SQL oder ein XML-Dokument zum speichern oder sowieso zu kompliziert?
  • Einlesen von neuen Fragen, die in einer Textdatei o.ä. stehen?
  • Größerer Fragenpool und es wird eine best. Anzahl von Fragen aus diesem Pool per Zufallsgenerator gestellt. Ansonsten hätte ich einfach nur ~15 Fragen und die würden dann nacheinander gestellt werden bis keine mehr da ist.
  • Reihenfolge der Antwortmöglichkeiten zufällig bestimmen, also nicht, dass man sich merkt, bei Frage 2 ist Antwortmöglichkeit 3 richtig ....
Leider reicht für dieses Projekt mein PHP-Wissen nicht aus (zumindest habe ich dieses Gefühl). Normalerweiße wäre das ja eine Gruppenarbeit, aber ich darf natürlich mit den 2 unfähgisten Mädels aus der Klasse zusammen das Projekt machen, nur damit ihr wisst wie ernst das ist:"Wie kann ich im Photoshop, wenn ich ein jpg speichere, die Kompremierung einstellen?" [O-Ton] ... Und mit solchen Leuten soll ich ein PHP-Projekt machen 8o

mfg

RemoteC
 
Jap ist alles machbar...
Mal sehen wie viel Zeit ich hab,vielleicht schreib ich ja mal ein Grundgerüst,
da dir ja 2 Partner fehlen ;)

Xalon

Edit: Sorry hab doch keine Zeit :(
 
Original von RemoteC
Am Ende des Quizes (~10-20 Fragen) kommt eine Auswertung mit % richtig und % falsch.
würd ich vll noch ne grafische Auswerung hinzu nehmen kommt besser an und sieht nicht schlecht aus Schwirigkeit: sehr einfach

Original von RemoteC
Highscoreliste, SQL oder ein XML-Dokument zum speichern oder sowieso zu kompliziert?
In SQL wäre das sehr einfach man müsste nur die daten in die db schreiben und dann nach punkten sortieren wenn du die Grundkentnisse zu sql hast, ist das auch einfach. Schwiregkeit einfach
Original von RemoteC
Einlesen von neuen Fragen, die in einer Textdatei o.ä. stehen?
Würd ich eigentlich auch mit sql machen mit Textdatei fände ich es schwerer. Schwirikeitsgrad: einfach bis mittel
Original von RemoteC
Größerer Fragenpool und es wird eine best. Anzahl von Fragen aus diesem Pool per Zufallsgenerator gestellt. Ansonsten hätte ich einfach nur ~15 Fragen und die würden dann nacheinander gestellt werden bis keine mehr da ist.
Großer Fragepool - mittel
15 Frage - einfach
Original von RemoteC
Reihenfolge der Antwortmöglichkeiten zufällig bestimmen, also nicht, dass man sich merkt, bei Frage 2 ist Antwortmöglichkeit 3 richtig ....
find ich etwas sinnlos wäre aber auch einfach.

Also ich denke mal das ist locker zu schaffen es sind auch keine Außergewöhnlichen kenntnisse notwendig. Also zu schaffen ;)
Und würd auch helfen dann würde wir optimal die mädels ersetzen^^
 
Besorg dir ein einfaches PHP-Gästebuch-Script, dann hast du Anschauungsmaterial für die Umsetzung von Eingabe und Speicherung sowie Ausgabe und Bearbeitung. Bleibt zwar noch einiges übrig, aber selber denken schadet ja nicht ;)
 
Danke für eure Antworten, wenn ihr noch eine Idee habt, die realisirbar ist, dann raus damit :)

Außerdem möchte ich noch eine Aussage von einem Mädel zitieren, welche ich wirklich hart fand. Immerhin gehe ich in eine ITK, also mit Computerschwerpunkt :rolleyes:
"Wenn man die Festplatte ausbaut, gehen da nicht die Daten verloren?!"

Selber denken will ich auf jeden Fall! Bis jetzt habe ich noch für keines meiner HP-Projekte PHP gebraucht, aber wenn man sich auch selber zusammenreimen kann worum es geht ist es auf jeden Fall gut. Ich bin in diesem Thema ziemlich wissbegierig.
 
//POST1
Original von Sunrize
Wie sehen denn die Mädels aus? Eventuell schreib ich Dir den Code.

Hendrik
Das willst du nicht wissen :D

//POST2
UPDATE:
So, das Fomular hab ich schon und er weiß auch schon ob die Fragen richtig oder falsch beantwortet wurden. Der momentan Fortschritt

Für die Fragen schaut der Code so aus:
PHP:
<html>
<head>
<title>PHP - Ein Quiz</title>
</head>
<body>
<form action="auswertung.php" method="post">
<p>
Frage1:
<br>Wie heißt der führende Prozessorhersteller?
</p>
  <p>
    <input type="radio" name="ant" value="f"> AMD<br>
    <input type="radio" name="ant" value="r"> Intel<br>
    <input type="radio" name="ant" value="f"> nVidia<br>
    <input type="radio" name="ant" value="f"> IBM<br>
    <input type="hidden" name="fnr" value="1">
    <input type="hidden" name="pkt" value="<?php session_start(); echo $_SESSION['pkt']; ?>">
  </p>
<p>
  <input type = "submit">
  <input type = "reset">
</p>
</form>
<br>
<?php
$pkt == 0;
?>
<p>
 
</p>
</body>
</html>

Das mit $pkt==0; steht natürlich nur bei Frage 1, ansonsten schaut das gleich aus bei den weiteren Fragen.

Und nach jeder Frage wird das Formular mit diesen Skript ausgewertet:
PHP:
<html>
<head>
<title>PHP - Ein Quiz</title>
</head>
<body>
<?php
session_start();
$ant = $_POST['ant'];
$fnr = $_POST['fnr'];
$pkt = $_POST['pkt'];

if($ant == "f")
{
  echo "<br>Leider falsch!<br><p><a href=\"frage".($fnr + 1).".php\">Weiter zur nächsten Frage</a></p>";
}
elseif($ant=="r")
{
  echo "<br>Wow, das ist richtig!<br><p><a href=\"frage".($fnr + 1).".php\">Weiter zur nächsten Frage</a></p>";
  $pkt + 1;
  $_SESSION['pkt'] = $pkt;
}
else
{
 echo "<br><b>Ungültige Eingabe!<br>Verwenden sie bitte den Zurück-Button Ihres Browser oder klicken Sie auf <a href=\"frage".$fnr.".php\">diesen Link</a></b>";
}
echo "<br>$pkt";
?>

<br>
<p></p>
</body>
</html>

In $ant wird entweder r oder f übergeben (richtig oder falsch), in $fnr die Nr. der Frage, das brauch ich um 1. zu wissen wieviele Fragen schon beantwortet wurden und 2. für den Link (frage1.php, frage2.php, frage3.php, ...) und in $pkt sollten die Punkte gezäht werden (richtig = +1 Punkt und falsch passiert nix).

Was ich noch brauch:
-Er zählt wieviele Fragen richtig beantwortet wurden und macht dann eine grafische Auswertung (Balkendiagramm) wieviel richtig, wieviel falsch.
-Eine Highscoreliste mithilfe von mySQL.

mfg

RemoteC

PS: Hab meinen alten Beitrag gelöscht und neu gepostet, hoffentlich kommt der Thread so wieder nach oben. Doppelposts sind ja nicht erlaubt - einerseits gut, andererseits in diesem Fall schlecht ...
 
So das ist mal mein Vorschlag:

PHP:
<html>
<head>
<title>PHP - Ein Quiz</title>
</head>
<body>
<?php
    $punkte = 0;                                    // In der ersten Frage
    $punkte = $_GET['pkt'];                  // In den aanderen Fragen
?>
<form action="auswertung.php" method="post">
<p>
Frage1:
<br>Wie heißt der führende Prozessorhersteller?
</p>
  <p>
    <input type="radio" name="ant" value="f"> AMD<br>
    <input type="radio" name="ant" value="r"> Intel<br>
    <input type="radio" name="ant" value="f"> nVidia<br>
    <input type="radio" name="ant" value="f"> IBM<br>
    <input type="hidden" name="fnr" value="1">
    <input type="hidden" name="pkt" value="<?php echo $punkte; ?>">
  </p>
<p>
  <input type = "submit">
  <input type = "reset">
</p>
</form>
<br>
<p>
 
</p>
</body>
</html>

PHP:
html>
<head>
<title>PHP - Ein Quiz</title>
</head>
<body>

<?php
$ant = $_POST['ant'];
$fnr = $_POST['fnr'];
$punkte = $_POST['pkt'];

if($ant == "f")
{
  echo "<br>Leider falsch!<br><p><a href=\"frage".($fnr + 1).".php?pkt=".$punkte."\">Weiter zur nächsten Frage</a></p>";
}
elseif($ant=="r")
{
  $punkte++;
  echo "<br>Wow, das ist richtig!<br><p><a href=\"frage".($fnr + 1).".php?pkt=".$punkte."\">Weiter zur nächsten Frage</a></p>";
}
else
{
 echo "<br><b>Ungültige Eingabe!<br>Verwenden sie bitte den Zurück-Button Ihres Browser oder klicken Sie auf <a href=\"frage".$fnr.".php\">diesen Link</a></b>";
}
echo "<br>Aktueller Puktestand: ".$punkte;
?>

<br>
</body>
</html>

Ich kenn mich auch nich mit Sessions aus aber in deiner Version hast du zweimal sessiont_start benutzt was nich funktionieren kann. Aber mehr kann ich dir dazu nich sagen.

Du kannst Variablen einen Wert zuweißen indem du ein '=' benutzt, zwei '=' dienen zum Vergleich von zwei Variablen:
PHP:
$a = 0;     // Zuweisung   
$b = 1;     //  das Gleiche
$a == $b;   // Vergleich
wobei dir der Vergleich ohne funktion nix bringt.

so nur mal meine Anmerkung is bestimmt noch was offen...
 
@kimmmey deine lösung würd ich wirklich nur zum teil unterstüzen weil hier die punkte schön manipuliert werden können.

---------------------

wenn ich das right sehe brauchst du für jede Frage eine Datei mit den ganzen html klatsch usw+fragen.
Find ich sehr umständlich wenn du 100 Fragen haben willst brauchst du ja 100 Datei.
Als wenn du ja ne sql anbindung hast und eh wissbegierig bist, würd ich das ma ausprobieren(gibt pluspunkte^^) das du die fragen in der sqldb speicherst.
Wenn du es nicht so machst würd ichs mit include machen dann hättest du nicht in jeder frage teil body head und die ganzen tags.
Und zu der Grafischen Auswertung ist noch zu sagen das du auch noch die falsche zählen musst oder die gesamtanzahl aller fragen wissen musst.
 
Original von CPU8080
@kimmmey deine lösung würd ich wirklich nur zum teil unterstüzen weil hier die punkte schön manipuliert werden können.
Darauf bin ich auch schon gekommen, allerding kann man schon alleine vom value="r/f" beim Forumular "cheaten", also ist das auch egal momentan ;)
Original von CPU8080
Find ich sehr umständlich wenn du 100 Fragen haben willst brauchst du ja 100 Datei.
Als wenn du ja ne sql anbindung hast und eh wissbegierig bist, würd ich das ma ausprobieren(gibt pluspunkte^^) das du die fragen in der sqldb speicherst.
Umständlich ist es, aber ich mach nur 15 Fragen (sonst dauert das eh ewig) und daher ist es nicht soo schlimm. Wenn ich noch Zeit habe mach ich es mit include. Was die SQL-Anbindung angeht: Das steht nicht im Pflichtenheft und daher ist es eine unnötige Leistung, das bringt bei dem Professor höchstens eine schlechtere Note "Das Projekt darf nicht 99% erfüllen und schon gar nicht 101%, es muss 100% erfüllen" :rolleyes:
Original von CPU8080
Und zu der Grafischen Auswertung ist noch zu sagen das du auch noch die falsche zählen musst oder die gesamtanzahl aller fragen wissen musst.
Die wäre das Nächste, momentan steht nur xx% aller Fragen richtig und xx% falsch. Das jetzt in eine Balkengrafik zu machen sollte nicht zu schwer sein (1 % = 1 px) oder so.

mfg

RemoteC
 
Original von Sunrize
Wiso machst Du die Fragen nicht in eine XML Datei?

Hendrik
Weil ich keine Ahnung davon habe, noch weniger als vom Auswerten des Formulars.
Eine Möglichkeit wäre das sicher, aber so viel Zeit habe ich nicht mehr und momentan funzt es einmal so.
Was mir jetzt noch fehlt ist das Balkendiagramm und die Highscoreliste, wer mir helfen will/kann ... :)

Sollte ich alles haben und noch Zeit, dann kann ich immer noch ein paar kosmetische Ausbesserungen machen :)

mfg

RemoteC
 
Ich hab auch mal so was gemacht. Es ist schon lange her und es ist auch viel reingeflickt. Vielleicht kannst du da auch noch ein paar Ideen holen:
PHP:
$fehler = "";
If ($_POST['info'] == "first") {
If ($_POST['name'] == "") {
 $_POST['info'] = "";
 $_GET['act'] = "restart";
 $fehler = "<font color=\"red\">Es wurde kein Name eingegeben</font><br><br>";
 $_SESSION['game_points'] = 0;
 $_SESSION['game_id'] = 1;
 $_SESSION['name'] = "";
}
}

$fertig = "0";
If (($_SESSION['game_id'] > $_SESSION['fragenlimit']) and ($fehler == "")) {
$fertig = "1";
$sql = "INSERT INTO gamerank
	(id, name, richtig, falsch, points, time, ip, cheat2)
VALUES
	('', '".$_SESSION['name']."', '".$_SESSION['game_richtigeantworten']."', '".$_SESSION['game_falscheantworten']."', '".$_SESSION['game_points']."', '".time()."', '".$_SERVER['REMOTE_ADDR']."', '".$_SESSION['cheat2']."');";

$result = mySQL_query($sql);
 $_SESSION['name'] = "";
$_SESSION['game_id'] = 1;
}
?>If ($_GET['s'] != "game") {
If (($_GET['um'] != "interaktiv") and ($_GET['um'] != "open")) {
$_GET['act'] = "restart";
$_POST['info'] = "first";
}
}

$_SESSION['fragenlimit'] = floor(((time() - 1122847200+1800)/604800))+2;

If ($_POST['info'] == "first") {
$_SESSION['name'] = $_POST['name'];
$_SESSION['cheat2'] = 0;
$_SESSION['game_id'] = 1;
$_SESSION['game_points'] = 0;
$_SESSION['answered'] = "0";
$_SESSION['answered2'] = "0";
$_SESSION['game_falscheantworten'] = 0;
$_SESSION['game_richtigeantworten'] = 0;
$_SESSION['reihenfolge2'] = zufallsreihe($_SESSION['fragenlimit']);
}

If ($_POST['action'] == "answer") {
If ($_SESSION['answered'] == "1") {
 $_SESSION['game_points'] = $_SESSION['game_points']-15;
 $_SESSION['cheat2']++;
echo "<font color=\"red\">Nicht mogeln! (-15 Punkte)</font><br><br>";
}
$_SESSION['answered'] = "1";


If (time() - $_SESSION['timeanswerstart']-5 > $_SESSION['config_time']) {
echo "Zeitlimit Überschritten. (Punkte werden nicht gezählt)";
$_SESSION['game_id']++;
 $_SESSION['answered2'] = "0";

} else {
If ($_POST['antwort'] == $_SESSION['config_richtig']) {
echo "Die Antwort ist <b>richtig</b>.";
 $_SESSION['game_points'] = $_SESSION['game_points']+$_SESSION['config_pluspoints'];
 $_SESSION['game_points'] = $_SESSION['game_points']+round(($_SESSION['config_time']-(time() - $_SESSION['timeanswerstart']-5))/9);
 $_SESSION['game_richtigeantworten']++;
$_SESSION['game_id']++;
 $_SESSION['answered2'] = "0";
} else {
echo "Die Antwort ist <b>falsch</b>.";
 $_SESSION['game_falscheantworten']++;
$_SESSION['game_id']++;
 $_SESSION['answered2'] = "0";
}
}
?>
<form action="index.php?s=game&um=<?echo $_GET['um'];?>" method="POST">
<input type="hidden" name="<?echo session_name();?>" value="<?echo session_id();?>">
<input type="submit" value="Zur nächsten Frage">
</form>
<?
} elseif ($_GET['act'] == "restart") {
$_SESSION['name'] = $_POST['name'];
echo $fehler;
?>
<form action="index.php?s=game&um=<?echo $_GET['um'];?>" method="POST">
<input type="hidden" name="<?echo session_name();?>" value="<?echo session_id();?>">
<input type="hidden" name="info" value="first">
Name (Für die Bestenliste): <input type="text" name="name">
<input type="submit" value="Zur Frage">
</form>
Infos:
<ul>
<li>Aus Sicherheitsgründen wird ihre IP gespeichert. Sie wird nicht anders verarbeitet, als gleiche Mitspieler zu Identifizieren.</li>
<li>Jeden Montag wird automatisch eine zusätzliche Frage freigeschaltet, dadurch können mehr Punkte geholt werden. (Dadurch gibt es praktisch niemanden, der unschlagbar der Erste ist in der Bestenliste)</li>
<li>Wer mogelt (Zurück-Funktion, um Frage nochmal zu beantworten) dem werden 15 Punkte abgezogen und die Antwort zählt nicht</li>
<li>Für jede Frage gibt es eine gewisse Zeit, um zu Antworten. Darum gibt es zwischen jeder Frage eine Verschnaufspause (Zwischenseite mit Resultat)</li>
<li>Wenn eine Frage falsch beantwortet wird ist das Spiel noch nicht verloren</li>
<li>Wenn das Zeitlimit Überschritten wird, gibt es keine Punkte</li>
<li>Wie weniger Zeit man zum beantworten der Frage braucht, umsomehr gibt es Bonus</li>
<li>Bitte gebt eure richtigen Namen ein</li>
<li>Wer mehrmals mit verschiedenen Namen die Frage beantwortet wird in der Bestenliste speziell vermerkt (Wenn Fehler vorhanden, mich mit guter Begründung anschreiben). Natürlich nur sehr Auffällige, dir zuerst alle Antworten aufschreiben und so. (Das ist nicht so schwer herauszufinden)</li>
</ul>
<?
} elseif ($fertig == "1") {
?>
Statistik:
<table>
 <tr>
  <td>Fragen:</td>
  <td><?echo $_SESSION['fragenlimit'];?></td>
 </tr>
 <tr>
  <td>Davon richtig beantwortet:</td>
  <td><?echo $_SESSION['game_richtigeantworten'];?> (<?echo (round(100/$_SESSION['fragenlimit'])*$_SESSION['game_richtigeantworten']);?>%)</td>
 </tr>
 <tr>
  <td>Davon falsch beantwortet:</td>
  <td><?echo $_SESSION['game_falscheantworten'];?> (<?echo (round(100/$_SESSION['fragenlimit'])*$_SESSION['game_falscheantworten']);?>%)</td>
 </tr>
 <tr>
  <td>Punkte:</td>
  <td><?echo $_SESSION['game_points'];?></td>
 </tr>
</table>
Ihr Resultat wurde verarbeitet und in die Bestenliste übertragen.
<a href="index.php?s=gamerank&um=<?echo $_GET['um'];?>">Zur Bestenliste</a>

<?
$_SESSION['game_points'] = 0;
} else {

If ($_SESSION['answered2'] == "1") {
 $_SESSION['game_points'] = $_SESSION['game_points']-15;
echo "<font color=\"red\">Nicht mogeln! (-15 Punkte)</font><br><br>";
}
 $_SESSION['answered'] = "0";
 $_SESSION['answered2'] = "1";
 $reihenfolge = explode("|", $_SESSION['reihenfolge2']);
 $sql = "SELECT * FROM game WHERE `id` = '".$reihenfolge[$_SESSION['game_id']-1]."';";
 $result = mysql_query($sql);
 $row = mysql_fetch_assoc($result);
 $game_antwort = explode("|", $row['antworten']);
 $_SESSION['timeanswerstart'] = time();
 $_SESSION['config_time'] = $row['zeit'];
 $_SESSION['config_richtig'] = $row['richtig'];
 $_SESSION['config_pluspoints'] = $row['points'];
 ?>
 Für diese Frage stehen ihnen <b><?echo $row['zeit'];?> Sekunden</b> zur Verfügung.<br><br>
 <form action="index.php?s=game&um=<?echo $_GET['um'];?>" method="POST">
<input type="hidden" name="<?echo session_name();?>" value="<?echo session_id();?>">
 <input type="hidden" name="action" value="answer">
 <table>
  <tr>
   <td>Frage:</td>
   <td><?echo $row['frage'];?></td>
  </tr>
 <?
 for ( $counter=1; $counter<=$row['antwortenmenge']; $counter++ ) {
 ?>
  <tr>
   <td><label for="a<?echo $counter;?>">Antwort <?echo $counter;?>:</label></td>
   <td><input id="a<?echo $counter;?>" type="radio" name="antwort" value="<?echo $game_antwort[$counter-1];?>"<?If($counter==1) {echo " checked";}?>><label for="a<?echo $counter;?>"><?echo $game_antwort[$counter-1];?></label></td>
  </tr>
 <?
 }
 ?>
  <tr>
   <td><input type="submit" value="Senden"></td>
   <td></td>
  </tr>
 </table>
 </form>
<?
 }
?>
Edit: Vielleicht stimmt er nicht ganz, da er vorher in ein Design integriert war, dass auf einem eher komplizierterem System aufgebaut ist.
 
Danke der Hilfe von CPU8080 habe ich das Skript jetzt so gut wie fertig, ein paar Kleinigkeiten könnte man noch machen aber das ist nicht so wichtig und übermorgen hab ich auch schon die Präsentation des Projekts also sowieso nicht mehr viel Zeit noch großartig etwas zu ändern.
Wenn jemand natürlich der Meinung ist, dass noch etwas unbedingt gemacht gehört dann darf er sich bei mir via ICQ melden und es mir erklären. ;D

Ich bedanke mich nochmals bei CPU8080 für die Hilfe und vor allem die Geduld wenn ich etwas nicht sofort verstanden habe :)

PS: Nochmals der Link zum Quiz
 
Original von $oul
Unten steht session_destroy()

mfg $oul
Ich weiß, das wurde gerade behoben, danke nochmal an CPU8080 :)

Nachdem er immer 0 % in die db geschrieben hat hab ich das session_destroy mal aus dem php-tag rausgegeben und nicht gelöscht weil ich es sonst vergessen hätte ;)
 
Aber die Highscoreliste funktioniert noch nicht ganz...

ich habe 66% richtig gehabt, es wurden 73 eingetragen?!?
 
die überprüfung, ob eine antwort richtig ist, solltest du im php-script selbst machen lassen...

ich hab dein script mal ein wenig umgeschrieben (wenn man das denn so nennen kann wenn man den source nicht kennt xD);
jetzt mit einer zufälligen anordnung der fragen, man kann nicht mehr (wie ich) 106% erreichen und man kann die richtigen antworten nicht mehr aus dem quelltext ablesen:
http://send0r.se.funpic.de/quiz.php

der code:
Code:
<?php

//Name des Scriptes
	$script = "quiz.php";


//Jede Seite _muss_ bei jedem Aufruf geladen werden und darf nicht aus
//dem Cache des Browsers geladen werden (würde die Zufälligkeit der
//gestellten Fragen stören bzw. ignorieren)
	header("Cache-Control: no-cache, must-revalidate");
	header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");


//##########################################################################//

$frage[1]	= "Wie heißt der führende Prozessorhersteller?";
$richtig[1]	= "Intel";
$antwort[1][0]	= "AMD";
$antwort[1][1]	= "Intel";
$antwort[1][2]	= "nVidia";
$antwort[1][3]	= "IBM";

$frage[2]	= "Zu welchem Land gehört Grönland?";
$richtig[2]	= "Dänemark";
$antwort[2][0]	= "Großbritannien";
$antwort[2][1]	= "Kanada";
$antwort[2][2]	= "Island";
$antwort[2][3]	= "Dänemark";

$frage[3]	= "Aus welchem Gestein besteht die Böhmische Masse vornehmlich?";
$richtig[3]	= "Granit und Gneisen";
$antwort[3][0]	= "Granit und Gneisen";
$antwort[3][1]	= "Marmor und Granit";
$antwort[3][2]	= "Schiefer und Bernstein";
$antwort[3][3]	= "Batholith und Flöz";

$frage[4]	= "In welcher Stadt hat BMW seinen Hauptsitz?";
$richtig[4]	= "München";
$antwort[4][0]	= "Nürnberg";
$antwort[4][1]	= "München";
$antwort[4][2]	= "Wolfsburg";
$antwort[4][3]	= "Rüsselsheim";

// [...]
//##########################################################################//


//Aktuellen Punktestand und Fragenummer aus dem Cookie
//holen und in verwertbare Variablen packen
	if(!empty($_COOKIE["FrageSession"])) {
		$array = explode("|",$_COOKIE["FrageSession"]);
		$fnr = $array[0];
		$pkt = $array[1];

		if(empty($pkt)) { $pkt = "0"; }
	}

//Falls das Quiz neu gestartet werden soll,
//Sessioncookie wieder auf Anfang setzen
	if(isset($_GET["neustart"])) {
		setcookie("FrageSession", "1|0");
		$frage_stellen = TRUE;

		$fnr = "1";
		$pkt = "0";
	}

//Highscore-Anzeige
	if(isset($_GET["highscore"])) {
		$end_quiz = TRUE;

		//###############################//
		// Code, um die Einträge aus der //
		// Highscoreliste auszulesen     //
		//###############################//
	}

//Eintrag in die Highscore-Liste hinzufügen
	if(isset($_GET["add"]) && !empty($_GET["name"])) {
		$end_quiz = TRUE;

		//Username zum Hinzufügen
			$name = $_GET["name"];

		//Prozent des Users, gerundet auf eine Nachkommastelle
			$prozent = round(($pkt/count($frage))*100, 1);

		//###############################//
		// Code, um einen Eintrag in die //
		// Highscoreliste hinzuzufügen   //
		//###############################//
	}

//Wenn das Quiz nur so aufgerufen wird, dann wird die
//erste Frage gestellt
	if(empty($fnr)) {
		$fnr = 1;
	}

//Sollte jemand versuchen zu betrügen, indem er seine
//Punktzahl höher setzt als die aktuelle Frage, wird
//die folgende Meldung ausgegeben und der Cookie wieder
//auf den Anfangswert zurückgesetzt.
	if($pkt>$fnr) {
		setcookie("FrageSession", "1|0");
		echo "Geschummelt wird nicht ;P"; exit;
	}

//Bei erfolgreicher Absolvierung aller Fragen wird die
//Prozentzahl der erfolgreichen Fragen und die
//Möglichkeit einer Speicherung ausgegeben
	if($fnr>count($frage)) {
		$end_quiz = TRUE;
		$frage_stellen = FALSE;

		//Prozent, gerundet auf eine Nachkommastelle
			$prozent = round(($pkt/count($frage))*100, 1);


		$ausgabe = "Sie haben ".$pkt." von ".count($frage)." Fragen richtig beantwortet.<br><br><br><br>";

		$ausgabe .= "<img src=\"r.gif\" height=\"5\" width=\"".($prozent*2)."\"> ".$prozent." % richtig <br><br><br>";
		$ausgabe .= "<img src=\"f.gif\" height=\"5\" width=\"".((100-$prozent)*2)."\"> ".(100-$prozent)." % falsch<br><br>";

		$ausgabe .= "<p> </p>\n<br>\n\n<p>\n<form action=\"".$script."?add\" method=\"POST\">\n<p>\nName:\n<br>\n<input name=\"name\" type=\"text\" size=\"3\" maxlength=\"3\"></p><p>\n<input type = \"submit\">\n<input type = \"reset\">\n</p>\n</form>\n</p>";
	}

if($end_quiz==FALSE) {
	$ant = $_POST["ant"];

	//Wenn die Antwort nicht leer ist und die aktuell im Cookie
	//gespeicherte Frage identisch mit der gestellten ist...
		if(!empty($ant) && $_POST["post_fnr"] == $fnr) {
			$frage_stellen = FALSE;

			//Ist die Antwort richtig, wird mit der nächsten Frage
			//weitergemacht und der Punktestand erhöht,
				if($richtig[$fnr] == $ant) {
					$pkt = $pkt + 1;

					$ausgabe = "Wow, das ist richtig!<br><br>\n<a href=\"".$script."\">Weiter zur nächsten Frage</a>\n<br><br>Aktueller Punktestand: ".$pkt."<br><br>";
				}

			//ist sie falsch, bleibt der Punktestand gleich und es
			//wird ebenfals mit der nächsten Frage weitergemacht
				else {
					$ausgabe = "Leider falsch!<br><br>\n<a href=\"".$script."\">Weiter zur nächsten Frage</a>\n<br><br>Aktueller Punktestand: ".$pkt."<br><br>";
				}

			$fnr = $fnr + 1;
			setcookie("FrageSession", $fnr."|".$pkt);
		}

	//Wenn keine Antwort per POST-Methode übergeben wird,
	//wird mit der aktuellen Frage weitergemacht
		else {
			$frage_stellen = TRUE;

			$ausgabe = "Frage ".$fnr.":<br>".$frage[$fnr]."</p></span>\n<p><span class=\"antwortm\">";
		}
}

?>

<html>
<head>
<link rel="stylesheet" type="text/css" href="format.css">
<title>PHP - Ein Quiz</title>
</head>
<body>
<p><img src="banner1.jpg" width="600" height="200"><br></p>

<?php

if($frage_stellen == TRUE) {
	echo "<form method=\"post\">\n<p><span class=\"frage\">\n\n";
}

echo $ausgabe;

if($frage_stellen == TRUE) {

	//Zufälligkeit von PHP erzwingen
		srand((float)microtime() * 1000000);

	//Die zweite Dimension des Fragen-Arrays durcheinanderwürfeln
		shuffle($antwort[$fnr]);

	//und ausgeben:
		for($i=0; $i<4; $i++) {
			echo "<input type=\"radio\" name=\"ant\" value=\"".$antwort[$fnr][$i]."\"> ".$antwort[$fnr][$i]."<br>\n";
		}

?>

  <input type="hidden" name="post_fnr" value="<?php echo $fnr; ?>">
  </p></span>

<p>
  <input type = "submit">
  <input type = "reset">
</p>
</form>

<?php } ?>

<br>

<a href="<?php echo $script; ?>?highscore">Highscoreliste anzeigen</a>

<br>

<a href="<?php echo $script; ?>?neustart">Quiz neu starten</a>

<br>
<p>
 
</p>

</body>
</html>

ps: falls dir mein code gefällt, du ihn verwenden willst und dir was unklar ist, schreib mich per icq an --> 168039981

cYa
 
Zurück
Oben