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.

    9 Mal editiert, zuletzt von hpuettma (5. Oktober 2017 um 22:48)

  • 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!

    if(!sleep)

    {$sheep++;}

  • 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?

    Einmal editiert, zuletzt von hpuettma (6. Oktober 2017 um 11:54)

  • 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.

    2 Mal editiert, zuletzt von hpuettma (6. Oktober 2017 um 12:47)

  • Arbeitest du mit einer lokalen Entwicklungsumgebung oder direkt auf einem Server?

  • 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.

    if(!sleep)

    {$sheep++;}

  • 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.

    Einmal editiert, zuletzt von hpuettma (6. Oktober 2017 um 16:28)

    • Offizieller Beitrag

    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 (10. Oktober 2017 um 11:23) aus folgendem Grund: MOD: PHP-Tags korrigiert

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

    if(!sleep)

    {$sheep++;}

  • 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.

    Einmal editiert, zuletzt von hpuettma (9. Oktober 2017 um 23:26)

  • 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 (10. Oktober 2017 um 07:34)