echo $begrüßung;
Es geht um ein mehrseitiges Kontaktformular. Der Nutze gibt also auf einer Seite seine Daten ein, klick auf Weiter, gelangt auf die nächste Seite, gibt seine Daten ein, etc.
Die Daten werden in einer Datenbank zwischen gespeichert, von Seite zu Seite wird nur eine SessionID per verstecktem Formfeld weitergegeben.
Warum nicht in der Session? Bei einem Abbruch des angefangenen Vorgangs hast du Leichen in der Datenbank. Sessiondaten werden automatisch weggeräumt, wenn sie lange Zeit nicht verwendet wurden. Aber das nur nebenbei.
Problem: Das Script an dass die Daten letztendlich gesendet werden sollen, hängt davon ab, welche Daten der Nutzer zuvor eingegeben/eingestellt hat. Es gibt also nicht ein festes Ziel, sondern mehre mögliche Ziele.
Ist diese Vorgehensweise bei der Verarbeitung zwingend? Oder kannst du die Daten von einem einzigen Script bearbeiten lassen und dann nur noch anschließend mit einer einfachen Weiterleitung auf die Zielseite verweisen? Diese kann ja bei Bedarf Daten aus der Session anzeigen.
Wie sende ich bei einer Weiterleitung POST-Daten mit? Geht das überhaupt?
Bei header("Location: ziel.php"); kann ich keine POST-Daten angeben (oder doch?).
Eine Weiterleitung ist nur ein Verkehrsschild. Das trägt dem Wegzuweisenden kein Gepäck hinterher. Der Browser muss selbst dafür sorgen, dass er das Umleitungsziel aufruft und notwendige Daten erneut mitsendet.
Um das Zurückgehen und erneute Senden von POST-Daten zu verhindern, bedient man sich gern eines Tricks. Das per POST aufgerufenen Script verarbeitet die Daten und antwortet mit einem Location-Header. Der Browser ruft daraufhin das angegebene Ziel per GET auf. Ein Zurückgehen führt auf die Seite vor dem POST-Aufruf. Dass dieser Trick (soweit ich weiß) immer funktioniert, zeigt, dass ein Location-Header einen GET-Request zur Folge hat. Die POST-Daten werden dabei verworfen.
Hat jemand eine Idee wie ich das lösen kann?
Versuche Weiterleitungen generell sparsam zu verwenden. Umleititis ist keine Lösung sondern in vielen Fällen bestenfalls überflüssig. Fallunterscheidungen kann man in einem einzigen Script abarbeiten. Man muss dazu nicht unbedingt mehrere Scripte vorhalten. Wenn das Script zu umfangreich wird, kann man Code oder feststehende Texte auslagern und inkludierern, per readfile() durchreichen oder mit anderen Filesystemfunktionen einlesen, gegebenenfalls bearbeiten und zum Anwender ausgeben.
echo "$verabschiedung $name";