• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

nicht richtiges neu laden

GrafAlucard

Neues Mitglied
hallo alle zusammen,

ich habe einen kleinen mathetest erstellt mittels php. leider wird nach der ausgabe und der anzeige der lösung beim neuladen nicht die ursprüngliche seite wiedergegeben sondern immer noch die ansicht mit der auswertung.
desweiteren steht kurioserweise in den lücken wo die ergebnisse eingetragen werden sollen immer ein code drin den ich mir nicht erklären kann.
mit dem eingebauten reset button will ich eigentlich nur die möglichkeit bereitstellen, dass die user ihre eingabe zurück setzen können.

hat jemand eine idee für meine probleme?

mfg grafalucard

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>PHP Formular auswerten am Beispiel eines Lückentextes</title>
<style type="text/css">
input {
    padding:0; font-size:22px; font-family:Arial, Helvetica, sans-serif; background-color:#CCC; width:60px;
}
button {
     font-size:22px; font-family:Arial, Helvetica, sans-serif; width:180px; height:60px; margin-left:20px;
}
h1 {
    font-size:30px; font-family:Arial, Helvetica, sans-serif; font-weight:bold; margin-left:20px;
}
p {
    line-height:2em; font-size:22px; font-family:Arial, Helvetica, sans-serif; margin-left:40px;
}
.error {
    color:#ff0000;
}
.ok {
    color:#00CC00;
}
</style>
</head>

<body>
<?php
//Wieviel Lücken gibt es es insgesamt?
define('anzahl_luecken', 6);
//Wie lauten die richtigen Antworten?
$antworten = array(1 => '10',
                    2 => '5',
                    3 => '63',
                    4 => '87',
                    5 => '6',
                    6 => '32');

//Schaltfläche wurde gedrückt
if(isset($_POST['Submit'])) {
    $fehler  = false;
    $nachricht = "";

    //prüfe für jede Lücke
    foreach($_POST['luecke'] AS $id => $antwort) {
        if($antwort=="") {
            $fehler = true;
            $nachricht =  "Bitte alle L&uuml;cken ausf&uuml;llen.";
            break;
        } else {
            //Stimmt Eingabe mit Antwort überein?
            if(htmlentities($antwort)!=$antworten[$id]) {
                $nachricht .= $id.". Ergebnis ist leider falsch, richtig w&auml;re <b>\"".$antworten[$id]."\"</b> gewesen.<br />";
                $fehler = true;
            }
        }
    }
    //Alle Antworten sind richtig
    if(!$fehler) {
        $nachricht = "Herzlichen Gl&uuml;ckwunsch. Alle Antworten sind richtig!";
    }

    echo "<p class=\"".($fehler ? "error" : "ok")."\">$nachricht</p>";
}

?>
<form id="form1" name="form1" method="post" action="">
<h1>Ein kleiner Mathetest</h1>
<p>5 + 5 = 
  <input name="luecke[1]" type="text" value="<?php echo $_POST['luecke'][1];?>" id="luecke[1]" /> <br /><br />
25 : 5 = 
<input name="luecke[2]" type="text" value="<?php echo $_POST['luecke'][2];?>" id="luecke[2]" /> <br /><br />
21 x 3 = 
<input name="luecke[3]" type="text" value="<?php echo $_POST['luecke'][3];?>" id="luecke[3]" /> 
 + 12 x 2 = 
<input name="luecke[4]" type="text" value="<?php echo $_POST['luecke'][4];?>" id="luecke[4]" /> <br /><br />
33 : 11 x 2 = 
<input name="luecke[5]" type="text" value="<?php echo $_POST['luecke'][5];?>" id="luecke[5]" /> 
 + 17 + 3 x 3 = 
<input name="luecke[6]" type="text" value="<?php echo $_POST['luecke'][6];?>" id="luecke[6]" /> <br /></p>

   <button type="submit" name="Submit" value="Auswertungn" >Auswertung</button> 
   <button type="reset" name="Reset" value="Reset">Reset</button> 
   
</form>
</body>
</html>
 
Werbung:
Bei mir funktioniert das Script. Die Extension der Datei ist .php und du rufst das Script per http auf?
 
ja funktionieren tut es aber nicht so wie ich will^^

wenn du eine auswertung vor nimmst, dann steht ja da ob alle richtig sind oder es falsche lösungen gibt. so weit ok. aber wenn ich reset ausführe bzw die seite neu lade, steht das immer noch da, was aber nicht sein soll. es soll so aussehen als wie wenn die seite das erste mal aufgerufen wird.

hast du in den eingabe feldern nichts drin stehen? bei mir steht das html code und eine ortsangabe.
 
Werbung:
Ein Neuladen der Seite nachdem das Formular abgeschickt wurde, führt dazu, dass das Formular nochmal abgeschickt wird. Also passiert genau das was Du auch programmiert hast.

Wenn Du das verhindern willst, hast Du imho 4 Möglichkeiten:
a) Das schon genannte AJAX. In dem Fall müsstest Du das Formular per AJAX an eine PHP-Datei abschicken, welche die Eingaben prüft und dann den Erfolgscode zurück gibt. In dem Fall wird die Seite beim Abschicken des Formulars nicht wirklich abgeschickt - man bleibt auf der Seite und kann sie jederzeit Neuladen und so die Ausgabe "zurückstellen".
b) Man könnte im Formular einen Securecode unterbringen der bei jedem Aufruf erzeugt wird. Diesen prüfst Du nach Abschicken des Formulars. Stimmt der Securecode nicht mit dem zu prüfenden Wert überein, dann wird die Auswertung nicht nochmal ausgeführt. In diesem Fall kann man die Seite ebenfalls beliebig oft neuladen und erhält jedes Mal keine nochmalige Ausgabe des Ergebnisses.
c) Man könnte auch nach der Auswertung und vor der Ausgabe des Erfolgstextes den Nutzer auf eine Ergebnisseite weiterleiten. Er sieht dann nur noch den Ergebnistext, kein Formular, und muss auf einen Link klicken um zurück zum Formular zu kommen. Neuladen kann man in dem Fall so viel man will - er bleibt immer auf der Ergebnisseite.
d) Ist wie c) nur dass das Formular direkt selbst an eine neue Seite abgeschickt wird.

Was für dich optimal ist, musst Du selbst entscheiden. Die Umsetzung hängt dann auch von deinem Wissen diesbezüglich ab.
 
Zurück
Oben