Frage zu Quizscript

Michi94

Grünschnabel
Guten Tag,

Ich habe ein Problem bei einem Quiz - Script.

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>Quiz</title>
  <script type="text/javascript">
  function antwort_auswahl(){
   antworten = document.Form.antwort.length;
   ok = false;
   for (zaehler = 0; zaehler < antworten; zaehler++){
    if (document.Form.antwort[zaehler].checked) {
     ok = true;
   }
  }
   if (ok == false) {
    switch (antworten) {
      case 2:
       Zahl = "zwei";
       break;
      case 3:
       Zahl = "drei";
       break;
      case 4:
       Zahl = "vier";
       break;
      case 5:
       Zahl = "fünf";
       break;
      case 6:
       Zahl = "sechs";
       break;
      default:
       Zahl = "";
       break;
    }
    alert ("Bitte wählen Sie eine der " + Zahl + " Antworten aus!");
    return false;
   }
   else{
    return true;
   }
  }
  </script>
 </head>
<body style="font-family: Verdana, Arial; font-size: 12px;">

<h4><b>Quiz</b> / <a href="bestenliste.php">Bestenliste</a></h4>

<?php
/*  Quiz
 Das Script stammt von Werner Zenk
 Homepage: www.homepage-total.de
 E-Mail: webmaster@homepage-total.de
 Das Script darf frei genutzt werden,
 solange dieser Text nicht entfernt wird! */

error_reporting(E_ALL);

# Ab wieviel Punkte in die Bestenliste eintragen lassen?
$max_punkte = 4;

$quizfrage = file("quizfragen.txt");
$fragenanzahl = count($quizfrage);
$quiz_nr = ((isset($_GET["quiz_nr"])) ? $_GET["quiz_nr"] : 0);

echo "<form name=\"Form\" action=\"" . $_SERVER['PHP_SELF'] . "?quiz_nr=" . ($quiz_nr + 1) . "\"";
echo " method=\"post\" onSubmit=\"return antwort_auswahl();\">\n";

if ($quiz_nr > 0) {
 $punkte = ((isset($_POST["punkte"])) ? $_POST["punkte"] : 0);
 $antwort = ((isset($_POST["antwort"])) ? $_POST["antwort"] : "");
 $letzte_frage = explode("|", $quizfrage[($quiz_nr - 1)]);
 if ($antwort == $letzte_frage[7]) {
  echo "Die Antwort zu der Frage <em>„$letzte_frage[1]“</em> ist richtig!\n";
  $punkte++;
 }
 else {
  echo "Die Antwort zu der Frage <em>„$letzte_frage[1]“</em> ist falsch!<br>\n";
  echo "<b>Richtig ist:</b> <i>" . $letzte_frage[($letzte_frage[7] + 1)] . "</i>\n";
 }
 echo "<input type=\"hidden\" name=\"punkte\" value=\"$punkte\"><hr>\n";
}

if ($quiz_nr < $fragenanzahl) {
 list($nr, $frage) = explode("|", $quizfrage[$quiz_nr]);
 echo "<strong>Nr:</strong> $nr/$fragenanzahl<br>\n<strong>Frage:</strong> <em>$frage</em><br><br>\n";
 $antwort = explode("|", $quizfrage[$quiz_nr]);
 for ($zaehler = 2; $zaehler <= 6; $zaehler++) {
  if ($antwort[$zaehler] != "-") {
   $zahl = $zaehler - 1;
   echo "<input type=\"radio\" value=\"$zahl\" name=\"antwort\" id=\"marke$zahl\">";
   echo " <label for=\"marke$zahl\">$antwort[$zaehler]</label><br>\n";
  }
 }
 echo "<br><input type=\"submit\" value=\"Weiter...\">\n</form>\n";
}
else {
 echo "</form>\n";
 if ($punkte != 0) {
  echo "Sie haben <b>$punkte</b> ". ($punkte == 1 ? "Frage" : "Fragen") ." von <b>$fragenanzahl</b> richtig beantwortet.<br><br>\n";
 }
 else {
   echo "Sie haben <b>keine</b> Frage richtig beantwortet.<br><br>\n";
 }
 echo "<a href=\"quiz.php\">Quiz neu starten!</a>";

 // In die Bestenliste eintragen
 if ($punkte >= $max_punkte) {
  echo "
   <br><br><b>In die Bestenliste eintragen</b><br>
   <form action=\"bestenliste.php\" method=\"post\">
    Name: <input type=\"text\" name=\"Name\" maxlength=\"18\">
    <input type=\"hidden\" name=\"punkte\" value=\"$punkte\">
    <input type=\"submit\" value=\"Eintragen\">
   </form>";
 }
}
?>

</body>
</html>

Das ist der Code. Mein Problem ist, das wenn man etwas falsch ausgewählt hat, einfach auf den Zürück-Button klickt und dies Berichtigt. Wie kann man da eine Speere einfügen?

Gruß und danke für jeden Beitrag
 
Das kommt darauf an wie weit du es sperren möchtest.

Nur für ein paar Minuten / solange der Browser noch auf ist? (Suchwort: Session)
Oder auf unbestimmte Zeit? (Suchwort: Sperre / Besucher sperren)

Letzteres ist nicht vollständig aber doch hinreichend realisierbar.

Für beides kann ich dir jetzt schon einmal Sessions empfehlen:
http://tut.php-quake.net/de/sessions.html

Wenn du sagst welche Variante dir vorschwebt dann kann man genauer helfen oder du suchst selbstständig anhand der gegebenen Suchwörter.
 
Ich meine, das wenn man die Frage falsch beantwortet hat, man nicht Zurück kann.
Also quasi nichts mehr an der letzten Eingabe geändert werden kann ;)
 
Danke, mach ich.

edit: Aber ich weiß immernoch nicht wie ich das mit dem Zurüclk Verbinde?
 
Zuletzt bearbeitet:
speichere $quiz_nr als session

PHP:
$quiz_nr = ((isset($_SESSION["quiz_nr"])) ? $_SESSION["quiz_nr"] : 0);
(ganz oben [jaa ganz oben], session_start(); einfügen) ( natürlich mit <?php ?> drum rum)
 
Session-Variablen sind Variablen die über mehrere Seiten hinweg gelten können - wie die Seite sagt. Auf der einen Seite fragst du ab ob die Variable bereits einen Wert hat. Zum Beispiel:
PHP:
if ($_SESSION['frage123'] == 1)

Wenn dem so ist, dann will jemand Mogeln. Wenn nicht dann führst du diese ein:
PHP:
$_SESSION['frage123'] = 1;

Pure Logik. Wenn dein Fragekatalog über mehrere Seiten geht ist es durchaus zu empfehlen ihn komplett mit Hilfe von einer Session laufen zu lassen.
 
Zurück