Hallo,
irgend wie bin ich scheinbar auf dem Holzweg.
Ich möchte eine Seite zu einer bestimmten Zeit neu Laden (refreshen). Da sich die Daten ändern, muss ich zwei Variablen dazu übergeben. Die Werte der Variablen werden erst später im Quelltext mit PHP errechnet. Zu übergeben des refresh mit Variablen habe ich so versucht zu übergeben.
<?PHP
echo "<meta http-equiv="refresh" content="10;URL=http://bautzennet/aktuell/bilder.phtml
?Punkt=".$Punkt."&PicNo=".$PicNo.">"; ?>
Gebe ich die beiden Variablen am Ende des quellcodes aus, sind sie vorhanden. Am Anfang des Quelltextes sind se leer.
Wo liegt mein Denkfehler ?
Wenn ich das jetzt richtig verstanden habe, dann berechnest Du ja was. Wenn Du diese Parameter _vor_ der Berechnung ausgibst, dann kann PHP sie ja noch nicht kennen (logisch, nicht?) Wenn Du sie aber erst _nach_ der Berechnung ausgibst, dann kennt PHP sie. Das Problem in Deinem Fall ist folgendes: Du musst den <meta>-Tag in den (HTML-)Header schreiben, damit kannst Du (leider) nicht bis zum Ende des Skripts warten.
Lösungen:
a) die einfachere: Du musst die Berechnung _vor_ der Ausgabe durchführen.
b) wenn a) nicht geht, dann würde ich das so machen:
- ganz am Anfang bevor jeglicher anderer Code ausgeführt wird --
ob_start ();
----------------------------------------------------------------
---- dort wo Du den Refresh schreiben willst -----------------
echo "<meta http-equiv="refresh" content="10;URL=http://bautzennet/aktuell/bilder.phtml?Punkt={{PUNKT}}&PicNo={{PICNO}}>";
----------------------------------------------------------------
-------- sobald Du die Variablen hast --------------------------
$ausgabe = ob_get_contents();
ob_end_clean();
$ausgabe = preg_replace ("/\{\{PUNKT\}\}/", urlencode($punkt), $ausgabe);
$ausgabe = preg_replace ("/\{\{PICNO\}\}/", urlencode($picno), $ausgabe);
echo $ausgabe;
----------------------------------------------------------------
Was ich da eigentlich tue? Mit ob_start (http://php.net/ob_start) starte ich die PHP-Ausgabe-Pufferungsfunktionen. Damit wird jegliche Ausgabe erst mal zwischengespeichert. Dann gibt der Code im Meta-Tag nur Platzhalter aus. Diese kommen aber nicht direkt zum Browser, sondern werden ja gepuffert. Dann hole ich mir mit ob_get_contents (http://php.net/ob_get_contents) die gesamte Ausgabe, die das Script bisher gemacht habe, sage ihm, er soll den Puffer löschen (ob_end_clean - http://php.net/ob_end_clean), ersetze die Platzhalter durch die richtigen Werte mit preg_replace und gebe die Ausgabe dann aus.
Achtung: das ist nicht besonders effizient! (bei kleineren Datenmengen aber erträglich)
Grüße,
Christian