TheFlu: Formularteile nach ausführung wieder verschwinden lassen

Hallo allerseits,

ich arbeite grade mit an einer Umfrage auf Basis von PHP und MySQL.
Die Eingaben werden mit einem normalen HTML Formular verarbeitet.

Es geht also immer: Eingabe > Absenden > PHP leitet an MySQL weiter > erneute Eingabe > ...

Wie kann ich jetzt die Eingabefelder (und andere nicht mehr gebrachte Teile des Formulars) ausblenden, wenn der "Senden" Button geklickt wurde?

Danke

  1. echo $begrüßung;

    ich arbeite grade mit an einer Umfrage auf Basis von PHP und MySQL.
    Die Eingaben werden mit einem normalen HTML Formular verarbeitet.

    HTML dient zur Anzeige von Webseiten. Zu einer Verarbeitung hat es keine Möglichkeiten.

    Es geht also immer: Eingabe > Absenden > PHP leitet an MySQL weiter > erneute Eingabe > ...
    Wie kann ich jetzt die Eingabefelder (und andere nicht mehr gebrachte Teile des Formulars) ausblenden, wenn der "Senden" Button geklickt wurde?

    Wenn ein Formular abgesendet wird, wird ein Request erzeugt, der einerseits die eingegebenen Daten an den Server sendet, und andererseits ein neues (HTML-)Dokument ausliefert. Und was da drin steht liegt doch ganz in deinem Ermessen.

    Ich vermute aber mal, dass du ein Problem hast, dass du nicht so beschrieben hast, dass ich es nachvollziehen konnte.

    echo "$verabschiedung $name";

    1. Ich hab halt alles in einem PHPDokument und muss schon mit diversen an Eingaben geknüpften IfKonstruktionen Kämpfen. Ich werde die verschiedenen Formularseiten in einzelne documente packen, so kann ich auch die Verlinkung besser handeln.

      Aber trotzdem Danke

      1. echo $begrüßung;

        Ich hab halt alles in einem PHPDokument und muss schon mit diversen an Eingaben geknüpften IfKonstruktionen Kämpfen. Ich werde die verschiedenen Formularseiten in einzelne documente packen, so kann ich auch die Verlinkung besser handeln.

        Ich stelle mir das eigentlich nicht so kompliziert vor.

        switch (isset($_POST['seite']) ? $_POST['seite'] : '') { // kein POST => default-Zweig
          case 1:
            if (!formular_1_auswerten())
              formular_1_anzeigen($_POST);
            else
              formular_2_anzeigen(array());
          case 2:
            if (!formular_2_auswerten())
              formular_2_anzeigen($_POST);
            else
              formular_3_anzeigen(array());
          ...
          case default:
            formular_1_anzeigen(array());
        }

        formular_X_auswerten() erledigt die Prüfung und gibt false zurück, wenn Fehler auftraten. In dem Fall wird das Formular erneut angezeigt, und die bisherigen Eingaben als Vorbelegung gesetzt. Wenn alle Eingaben in Ordnung waren, geht es zum nächsten Formular. Das bekommt ein leeres Array und erhält damit keine Vorbelegungswerte.
        Innerhalb von formular_X_anzeigen($values) könntest du Eingabefelder wie folgt erzeugen:

        printf('<input type="text" name="foo" value=%s">',
           htmlspecialchars(isset($values['foo']) ? $values['foo'] : ''));

        Die zweite Zeile kannst du ja in eine eigenständige Funktion auslagern, dann ist der Tippaufwand nicht so groß. Ihr Funktionskopf könnte beispielsweise so aussehen:

        function test($values, $key, $default = '')

        Jedes Teil-Formular bekommt ein eindeutiges Hidden-Feld, das über $_POST['seite'] ausgewertet werden kann, damit switch weiß, wo es langzulaufen hat.

        Das Problem bei einzelnen Seiten für jedes Formular ist, dass du von Formular 1 per action-Attribut zu Formular 2 kommst und da erst die Eingabeprüfung für 1 erledigen kannst. Und dann musst du irgendwie wieder zurück zu 1 und willst aber auch möglichst die bisherigen (fehlerhaften) Eingabewerte erhalten, um sie korrigieren zu lassen. Das ergibt ein Hin- und Hergehüpfe mit Daten im Gepäck. Oder du wertest die Eingaben mit Javascript aus und verhinderst so ein Voranschreiten zu 2, was aber die Mitarbeit von JS voraussetzt, und wegen Ausschaltbarkeit keine Garantie für fehlerfreie Werte ist.

        echo "$verabschiedung $name";