| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Ein Quiz programmieren
Diskussion: Ein Quiz programmieren im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige
Hallo!
Ich soll für ein Schulprojekt ein Quiz in PHP programmieren. Eines Vorweg: Ich will (momentan ^^) keinen fertigen ...
 | |
20.04.06, 18:16
|
#1 (permalink)
|
Registriert seit: 11.07.05 Likes: 0 | Ein Quiz programmieren Anzeige 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 |
| |
20.04.06, 18:42
|
#2 (permalink)
|
Registriert seit: 23.05.05 Likes: 0 | 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 |
| | | |
| | HaBOT
| - Anzeige - |
| |
20.04.06, 18:46
|
#3 (permalink)
|
Registriert seit: 20.07.05 Likes: 0 | Zitat: 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 Zitat: 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 Zitat: 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 Zitat: 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 Zitat: 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^^ |
| |
20.04.06, 20:40
|
#4 (permalink)
|
Registriert seit: 07.05.03 Likes: 0 | 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 |
| |
20.04.06, 21:34
|
#5 (permalink)
| Themenstarter
Registriert seit: 11.07.05 Likes: 0 | 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 "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. |
| |
20.04.06, 23:31
|
#7 (permalink)
| Themenstarter
Registriert seit: 11.07.05 Likes: 0 | Danke für die Links
Besonders das Tutorial ist interessant. Werde ich mir morgen mal anschauen und damit beginnen |
| |
21.04.06, 11:41
|
#8 (permalink)
|
Registriert seit: 04.01.05 Likes: 0 | Wie sehen denn die Mädels aus? Eventuell schreib ich Dir den Code.
Hendrik |
| |
03.06.06, 22:25
|
#9 (permalink)
| Themenstarter
Registriert seit: 11.07.05 Likes: 0 | //POST1 Zitat: Original von Sunrize
Wie sehen denn die Mädels aus? Eventuell schreib ich Dir den Code.
Hendrik
| Das willst du nicht wissen //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-Code:
<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-Code:
<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 ... |
| |
03.06.06, 23:06
|
#10 (permalink)
|
Registriert seit: 05.11.05 Likes: 0 | So das ist mal mein Vorschlag: PHP-Code:
<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-Code:
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-Code: $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... |
| |
03.06.06, 23:18
|
#11 (permalink)
|
Registriert seit: 20.07.05 Likes: 0 | @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. |
| |
04.06.06, 01:12
|
#12 (permalink)
| Themenstarter
Registriert seit: 11.07.05 Likes: 0 | Zitat: 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 Zitat: 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" Zitat: 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 |
| |
04.06.06, 01:23
|
#13 (permalink)
|
Registriert seit: 04.01.05 Likes: 0 | Wiso machst Du die Fragen nicht in eine XML Datei?
Hendrik |
| |
04.06.06, 12:04
|
#14 (permalink)
| Themenstarter
Registriert seit: 11.07.05 Likes: 0 | Zitat: 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 |
| |
05.06.06, 13:19
|
#15 (permalink)
|
Registriert seit: 06.04.05 Likes: 0 | 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-Code:
$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. |
| |  | | | |
| | | - Anzeige - |
| | [HaBo]
» Web, Network & Multimedia Palace
» (Web-) Design und webbasierte Sprachen
»
Ein Quiz programmieren
| Themen-Optionen | | | | Ansicht | Linear-Darstellung |
Forumregeln
| Es ist Ihnen nicht erlaubt, neue Themen zu verfassen. Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten. Es ist Ihnen nicht erlaubt, Anhänge hochzuladen. Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten. HTML-Code ist aus. | | |
|