header() - POST-Variablen
RomanD
- php
0 Sven Rautenberg0 Sven Schrodt0 RomanD0 Sven Schrodt
Hi,
ich redirecte auf ein Skript mittels
header("Location: skript.php");
Kann ich an skript.php irgendwie POST-Variablen mit übergeben?
Gruß
Moin!
ich redirecte auf ein Skript mittels
header("Location: skript.php");
Kann ich an skript.php irgendwie POST-Variablen mit übergeben?
Nein, das ist Aufgabe des Browsers. Ein Redirect heißt ja: "Bei mir bist du falsch, geh dorthin." - und je nach Redirect-Statuscode soll der Browser dann ein GET oder auch ein POST auf die neue Adresse machen - und da tun sie sich, global betrachtet, schwer, wenn ich mich recht erinnere.
Die beste Lösung ist, die POST-Daten direkt zum korrekten Ziel zu schicken.
- Sven Rautenberg
Hallo,
header("Location: skript.php");
Kann ich an skript.php irgendwie POST-Variablen mit übergeben?
Nein, das ist Aufgabe des Browsers. Ein Redirect heißt ja: "Bei mir bist du falsch, geh dorthin." - und je nach Redirect-Statuscode soll der Browser dann ein GET (...) auf die neue Adresse machen - und da tun sie sich, global betrachtet, schwer, wenn ich mich recht erinnere.
header("Location: skript.php?foo=bla&bar=blub");
sollte durchaus funktionieren - wenn ich mich recht erinnere ;)
Grüße, Matze
Würde gehen, aber da in den Eingabefelder möglicherweise langer Text stehen kann wollte ich es nicht üvber GET schicken
Hallo RomanD,
ich redirecte auf ein Skript mittels
header("Location: skript.php");Kann ich an skript.php irgendwie POST-Variablen mit übergeben?
meinst Du per POST-Methode an skript.php übermitteln, oder Daten aus dem aktuellen $_POST an skript.php senden?
Gruß aus Moers
Sven
Folgendes ist das Problem:
Ich habe ein Skript, dass ein PDF erstellt. Davor habe ich ein Formular, um die benötigten Daten für das PDF einzugeben.
Der Aufbau ist so:
if ($keine_eingabe || $fehlerhafte_eingabe) {
include("eingabe.php");
die();
}
/* Hier der Code zum Erstellen des PDFs */
Das funktioniert auf wunderbar, mit einer Ausnahme:
Wenn ich jetzt im Firefox über "Datei -> Seite speichern unter" das PDF speichern will, wird nicht das PDF gespeichert, sondern der Code des Eingabe-Formulars.
Deshalb wollte ich die Erstellung des PDFs in eine extra Datei auslagern und auf diese dann mittels header("Location ...") weiterleiten. Allerdings gehen da die Werte aus dem Eingabe-Formular verlohren.
Hallo RomanD,
Wenn ich jetzt im Firefox über "Datei -> Seite speichern unter" das PDF speichern will, wird nicht das PDF gespeichert, sondern der Code des Eingabe-Formulars.
Das verstehe ich nicht, das würde bedeuten, das Formular wurde nicht gesendet.
Deshalb wollte ich die Erstellung des PDFs in eine extra Datei auslagern und auf diese dann mittels header("Location ...") weiterleiten. Allerdings gehen da die Werte aus dem Eingabe-Formular verlohren.
Speicherst Du die PDF-Datei lokal auf dem Server?
Wie erzeugst du das PDF, dynamisch per PHP?
Gruß Sven
Das Formular wird gesendet, und das PDF wird richtig erstellt. Im Browser wird es auch richtig angezeigt.
Nur wenn ich es speichern will wird nicht das PDF gespeichert, sondern der HTML-Code des Eingabe-Formulars.
Das PDF erzeuge ich mit der pdflib und speichere es nicht auf dem Server, sondern lasse es direkt mittels
$data = pdf_get_buffer($pdf);
header('Content-type: application/pdf');
header('Content-disposition: inline; filename=image.pdf');
header('Content-length: ' . strlen($data));
echo $data;
an den Browser ausgeben.
Das Problem scheint wohl daran zu liegen, dass FF beim Speichern das Skript neu aussführt, aber die POST-Variablen vergisst. Deshalb wird vom Skript das Eingabe-Formular generiert und das dann gespeichert.
Hat jemand ne Idee wie ich das hinbekommen kann?
Moin!
Das Problem scheint wohl daran zu liegen, dass FF beim Speichern das Skript neu aussführt, aber die POST-Variablen vergisst. Deshalb wird vom Skript das Eingabe-Formular generiert und das dann gespeichert.
Hat jemand ne Idee wie ich das hinbekommen kann?
content-disposition: attachment - fordert den Benutzer direkt zum Speichern des PDF auf.
Alternativ: POST-Daten an einem passenden Ort speichern, und den Redirect mit einem entsprechenden GET-Parameter durchführen.
Passende Orte wären eine Datenbank (dann eine nicht erratbare Zugriffs-ID errechnen, z.B. mit SHA1, und die ebenfalls dort speichern) oder $_SESSION.
- Sven Rautenberg
Ja das hab ich befürchtet, so umfangreich wollte ich es halt nicht machen.
Meine vorläufige Lösung ist:
PDF erzeugen und auf dem Server speichern, mittels header("Location: ...") auf das PDF weiterleiten und beim Skript-Aufruf alle PDFs die älter als 10min sind löschen.
Gruß