verschachtelte Formular (zwei) über HTML und PHP steuern - ein riesen Problem?

  • Hallo liebes Forum,


    nach mehreren Tagen intensiver Überlegung und dem Aufbau einer sehr einfach gehaltenen Testumgebung komme ich trotzdem nicht weiter. Deshalb bitte ich um Eure Unterstützung.


    Vor ein paar Tagen habe ich dieselbe Frage schon einmal ins Netz gestellt und geglaubt, nach einem Tipp von „Bandit“ die Lösung gefunden zu haben. Zu früh gefreut.


    Das Problem von „verschachtelten Formularen“ mit HTML und PHP scheint nicht so einfach zu lösen zu sein. Zumindest nicht für mich! Die 4 Scripte mit 2 verschachtelten Formularen habe ich angefügt. Zur besseren Überprüfung des Gesamtablaufs bestehen die Scripte, bis auf zwei INCLUDE – Anweisungen, eigentlich nur aus ECHO-Befehlen. Außerdem habe ich den Browserablauf festgehalten und als Bilder beigelegt.


    Das Script-2 soll den gesamten Ablauf aller Folgescripte steuern. Leider komme ich nach dem Aufruf des 2. Formulars nicht mehr in das Script-2 zurück. Das war es schon, das ist mein Problem!


    Mit HTML-Mitteln kann man zwei Formulare nicht steuern. Den Tipp von „Bandit“ eine SESSION-Steuerung über PHP zu nutzen habe ich befolgt, leider habe ich aber Verständnisprobleme.


    Kann mir jemand – möglichst KONKRET – und nicht mit angedeuteten Lösungsansätzen weiterhelfen?


    Browserablauf:



    Hier die 4 Scripte:


    test1.php



    test2.php



    test3.php



    test4.php



    für einen funktionierenden Lösungsansatz bin ich sehr dankbar, aber bitte keine philosophischen Abhandlungen.

  • Ich habe in allen 4 Scripts den session_start() direkt nach <html> und <?php noch vor dem header Befehl eingebaut.
    Leider hat es keine Auswirkung auf den Ablauf.


    Den INCLUDE-Befehl für test4.php im test2.php habe ich ausgesternt, da test4.php ja schon durch test3.php aufgerufen wird. Auch hier dasselbe Ergebnis, leider.

  • Ich habe in allen 4 Scripts den session_start() direkt nach <html> und <?php noch vor dem header Befehl eingebaut.


    session_start gehört an den Anfang, auch vor <html>
    Mich wundert es, dass du da keine Fehlermeldung bekommst.

  • Beginne einfach jedes PHP-Dokument, das du in der Session nutzen willst (außer den 'includes') mit der Zeile..


    <?php session_start();?>


    Und es darf nichts davor stehen.. noch nicht mal ein Leerzeichen!

  • Habe <?php session_start();?> in test1 und test2 und test4.php als erstes Kommando stehen, die bisherige Abfrage auf Session_start habe ich entfernt. die Session-Befehle habe ich am Anfang stehen gelassen. test3 ist ein INCLUDE aus test2, dort habe ich den <?php session_start();?> nicht eingebaut.


    Leider muss ich mitteilen, dass die Änderung keine Auswirkung auf den Ablaub hatte. Schade.


    Soll ich die Scripte nochmal posten?

  • hier nochmal die überarbeiteten Scripte


    test1.php



    test2.php


    test3.php



    test4.php




    ich habe es getestet - im test3.php darf der Session_start nicht eingebaut werden, dann wird ein Fehler ausgegeben.

  • Dann solltest du unbedingt Änderungen an deiner php.ini durchführen. Normalerweise müsste dir PHP einige Fehler um die Ohren hauen, das scheint aber nicht zu passieren.


    Setze mal folgende Schalter um:


    error_reporting = E_ALL


    display_errors = On


    output_buffering = Off


    Danach den Apache neu starten

  • Uhhhh... da sind so viele Fehler drin - das kann gar nicht laufen!
    Fangen wir mit den einfachen Dingen an.
    Deine Include Datei (test3.php) werden wird in test2 ausgeführt und darf deswegen keine HTML Strukturelemente haben ( kein <html> kein <head> kein <body>).
    Dann sind da jede Menge HTML Fehler drin (zB mehrfach statt <br> bzw <br />) steht da <br /... ohne schließende Klammer - das sollte erst mal alles bereinigt werden, bevor du dich dem eigentlichen Problem widmen kannst.
    Da test4.php als 'action' - und somit als neue Seite - im Formular (im include test3, der ja eigentlich in test2 ausgeführt wird) aufgerufen wird, gibt es von dort aus kein 'zurück' zu test2.
    Ich denke, insgesamt ist die Struktur, die du gewählt hast, nicht geeignet, um dein Problem zu lösen.
    Das sollte alles in einer einzigen .php, mit ggf notwendigen includes, abgehandelt werden (Stichwort: Affenformuar).


    etwa so.
    prüfen ob Aufgabe 1 erfüllt - wenn ja, weiter mit Aufgabe 2
    wenn nein - Aufgabe 1 (ausfüllen Formular 1 und erneutes Aufrufen der Seite)


    prüfen ob Aufgabe 2 erfüllt - wenn ja, weiter
    wenn nein - Aufgabe 2 (ausfüllen Formular 2 und erneutes Aufrufen der Seite)


    1 und 2 erfüllt - was auch immer dann noch zu machen ist.

  • habe die Antwort von "Bandit" zunächst gar nicht gefunden. Warum auch immer.
    Ich habe also die c:/xampp/php/php.ini
    nach den Anweisungen von "Bandit" angepasst. den Server neu gestartet - und ...
    leider ist alles beim Alten geblieben, außer, dass ich eine Warnmeldung in 3 Scripts erhalte. Ich füge Sie bei.



    - - - Aktualisiert - - -


    Hallo Sailor, danke für die umfangreiche Fehleranalyse.
    Ich werde hoffentlich alle Fehler abstellen, testen und die überarbeiteiteten Scripte erneut posten. Es dauert eine Weile.


    Ich habe mächtig aufgeräumt, der Ablauf in einer PHP-Datei ist noch in Arbeit. Heute schaffe ich es zeitlich nicht mehr. Bis dann.

  • Sorry, aber Dein Kontextwechsel ist ungünstig.
    Das <html> zwischen dem session_start() und dem header() sollte Dir eigentlich eine einen Fehler werfen, weil auch vor dem header() keine Ausgaben erlaubt sind, <html> ist aber eine Ausgabe!


    Die Vermutung liegt daher nahe, dass Du eine nicht ganz aktuelle Version von PHP einsetzt, denn Dein error_reporting(E_ALL) liefert - ohne recherchiert zu haben - lt. meinem Wissen erst ab v7.x wirklich alle Fehler.


    Unter Berücksichtigung dieser Punkte, könnte Deine test1.php wie folgt umgebaut werden (ungetestet):


    Wo $anzpers herkommt ist mir allerdings nicht klar...

  • Hallo zusammen,


    ich bekomme noch zur ursprünglichen Ablaufsteuerung Ideen und Hinweise, danke dafür.
    Aber, ich arbeite im Moment daran, die gesamte Steuerung in EINER PHP-Datei unterzubringen, so wie es "Sailor" vorgeschlagen hat. Der Ablauf ist aber noch nicht fertig, ich arbeite daran.
    Ob ich den Ablauf zum Laufen bringe, weiss ich noch nicht.
    Ich werde mich auf jeden Fall, so oder so mit einem POST der neuen Ablaufsteuerung melden, sobald ich fertig bin.
    Bitte noch ein wenig Geduld, danke.

  • Hallo liebes Forum,


    es hat ein wenig gedauert, aber ich habe durch den Tipp vom "Sailor" einen fast funktionierenden Ablauf erstellt.


    Hier die neuen Scripte und die Browserausgaben:




    test_gesamt.php



    test1a.php



    test1b.php


    test2a.php



    test2b.php



    hier die Browserausgaben:




    Leider habe ich immer noch ein Problem. Wie kann ich verhindern, dass zwischen dem Formular-1 und dem Formular-2 immer ALLE Bildschirmausgaben "gemeinsam" ausgegeben werden.
    Ich möchte natürlich zunächst NUR die Ausgaben vom Formular-1 und dann (über einen leeren Screen) die Ausgaben vom Formular-2 bearbeiten können.


    Es wäre schön, wenn mir die freundlichen Helfer im Blog noch einmal weiterhelfen würden. Danke im Voraus.

    Einmal editiert, zuletzt von Arne Drews () aus folgendem Grund: MOD: PHP-Tags korrigiert

  • Wie wäre es denn so.... sollte die einzelnen Formulare auf separaten Bildschirmen anzeigen.

  • ich glaube ich träume ...


    Wie kann man in Windeseile ein solches Script erstellen??


    Problem gelöst - alles funktioniert - tausend Dank an das Forum und besonders an "Sailor" der mir meinen Ablauf noch mal professional überarbeitet hat.


    Ich kann mir gut vorstellen, dass der Ablauf von verschachtelten Formularen für sehr viele PHP/HTML-Einsteiger von großem Interesse ist. Lehrbücher und Schulungsbeispiele kratzen ja doch nur an der Oberfläche.

  • Wenn man jetzt noch aus ISO-8859-1 UTF-8 macht, die echo-Orgien entfernt und auch auf das Escapen von Anführungszeichen verzichtet, sieht die Sache doch schon ganz ordentlich aus:

    Einmal editiert, zuletzt von Bandit ()