Fritz: Inhalt einer POST-Variable löschen

Hallo

Ich brauche wieder mal eure Hilfe: Ich habe ein Formular mit zwei submit-Buttons, der eine heisst "back" mit dem value "zurück", der andere "forward" mit dem value "vor". Die action läuft so, dass beim Drücken des submit-Buttons eine php-Datei aufgerufen wird, auf der festgestellt wird, welcher der beiden submit-Buttons gedrückt wurde und je nachdem wird auf die eine oder die andere Seite weitergeleitet. So weit, so gut, das funktioniert eigentlich, zumindest beim ersten Aufruf, mit folgendem Code

function goal() {
if ($_POST[back]==zurück) {
 $action="form.php";
 }
else {
 $action="test2.php";
 }
return $action;

Es wird also festgestellt, ob die Variable von der Formularseite den Wert zurück hat oder nicht. Das Problem ist nun, wenn ich zum zweiten Mal auf diese Seite komme und nun den anderen Button drücke, hat ja die Variable $_POST[back] trotzdem schon den Wert "zurück", da dieser Wert stets mit hidden-feldern weitergegeben wird. Deshalb führt der Link dann natürlich immer auf die gleiche Seite, egal welchen Knopf ich drücke. Kann mir jemand sagen, wie ich den Inhalt dieser post-Variable löschen kann? Ich habs schon mit unset() probiert (direkt in der obigen Funktion), aber das funktioniert nicht.

Danke für wertvolle Ratschläge
Gruss Fritz

  1. he

    Unter anderem dieser Thread befasst sich mit deiner Frage:
    http://forum.de.selfhtml.org/archiv/2003/7/t52903/

    gruß bascombe

  2. echo $begrüßung;

    Ich brauche wieder mal eure Hilfe: Ich habe ein Formular mit zwei submit-Buttons, der eine heisst "back" mit dem value "zurück", der andere "forward" mit dem value "vor". Die action läuft so, dass beim Drücken des submit-Buttons eine php-Datei aufgerufen wird, auf der festgestellt wird, welcher der beiden submit-Buttons gedrückt wurde und je nachdem wird auf die eine oder die andere Seite weitergeleitet.

    Ich sehe bei dir auch diesen typische Anfängerversuch, jedes Teilproblem mit einem eigenen Script lösen zu wollen. Das hat vielleicht den Vorteil, dass der Code im Script recht geradlinig gehalten werden kann, aber auch den Nachteil des Hin- und Her-Weiterleitens, bei dem gleich wieder mehrere PHP-Aufrufe ausgeführt werden müssen und dabei neue Probleme beim Variablendurchreichen entstehen.

    if ($_POST[back]==zurück) {

    Wenn 'back' keine Konstante sondern ein String ist, sollte er auch als String notiert werden, also mit Anführungszeichen darum.

    Es wird also festgestellt, ob die Variable von der Formularseite den Wert zurück hat oder nicht. Das Problem ist nun, wenn ich zum zweiten Mal auf diese Seite komme und nun den anderen Button drücke, hat ja die Variable $_POST[back] trotzdem schon den Wert "zurück", da dieser Wert stets mit hidden-feldern weitergegeben wird.

    Das liegt dann wohl eher an der Weitergabe der Werte. Warum übergibst du diesen Wert denn in einem Hidden-Feld? Der wird doch nur für die Abarbeitung dieses einen Requests gebraucht, um zu unterscheiden, welcher Button gedrückt wurde.

    Kann mir jemand sagen, wie ich den Inhalt dieser post-Variable löschen kann? Ich habs schon mit unset() probiert (direkt in der obigen Funktion), aber das funktioniert nicht.

    Variablen existieren immer nur im aktuellen Script. Ein unset wirt sich ebenfalls nur auf die aktuelle Instanz aus. Es hilft nicht, die Weitergabe eines Wertes damit verhindern zu wollen, weil nichts weitergegeben wird, das man nicht selbst irgendwo explizit notiert hat.

    Das Array $_POST wird von PHP bei jedem Request mit den Daten des Requests gefüllt. Du kannst nur dafür sorgen, dass dieser Wert nicht im Request auftaucht, wenn du ihn nicht in $_POST stehen haben willst.

    echo "$verabschiedung $name";

    1. Erstmal Danke für die Hilfe.

      Es wird also festgestellt, ob die Variable von der Formularseite den Wert zurück hat oder nicht. Das Problem ist nun, wenn ich zum zweiten Mal auf diese Seite komme und nun den anderen Button drücke, hat ja die Variable $_POST[back] trotzdem schon den Wert "zurück", da dieser Wert stets mit hidden-feldern weitergegeben wird.

      Das liegt dann wohl eher an der Weitergabe der Werte. Warum übergibst du diesen Wert denn in einem Hidden-Feld? Der wird doch nur für die Abarbeitung dieses einen Requests gebraucht, um zu unterscheiden, welcher Button gedrückt wurde.

      Es ist so, dass ich ein mehrseitiges Formular habe und dazu ein Skript, mit dem alle Wert immer mitgeschleift werden, so dass die Werte erst ganz am Schluss in die DB geschrieben werden müssen (die Funktion findest unter vpassthru()). Das ist zwar ganz nützlich, aber eben werden halt auch die values der submit-Buttons immer mitgeschleift, was eben zu dem geschilderten Problem führt.

      1. echo $begrüßung;

        Es ist so, dass ich ein mehrseitiges Formular habe und dazu ein Skript, mit dem alle Wert immer mitgeschleift werden, so dass die Werte erst ganz am Schluss in die DB geschrieben werden müssen (die Funktion findest unter vpassthru()). Das ist zwar ganz nützlich, aber eben werden halt auch die values der submit-Buttons immer mitgeschleift, was eben zu dem geschilderten Problem führt.

        Auch wenn du die Werte erst zum Schluss prüfst und nicht schon zwischendrin bei jedem Formular[1], könntest du zum Zwischenspeichern, wie ich bereits vorschlug, eine Session verwenden, denn dafür wurden sie erschaffen. Darin kannst du dann die Antworten (nur die Antworten, nicht die Formular-Steuerinformation) ablegen.

        [1] Wie lässt du den Benutzer dann die Antworten korrigieren, wenn du feststellst, dass sie beispielsweise nicht im erwarteten Wertebereich lagen?

        echo "$verabschiedung $name";