refresh mit varibalen übergeben in PHP
Detlef Berger
- php
Moin moin,
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 ?
Wie sieht die richtige Lösung aus ???
Gruss
detlef
hI!
Kleiner Tip:
$HTTP_GET_VARS["variablenname"]
Mit diesem array kannst alle per URL übergebenen variablen abfragen!
$HTTP_POST_VARS["variablenname"]
Kannst alle per HTTP-POST (Formulare) übergebenen Variablen abfragen!
Deine Fehlerbedschreibung deutet darauf hin das du globale Variablen verwendest! -> Weiterer Tipp: VERWENDE AUF GAR KEINEN FALL DIE GLOBALEN VARIABLEN, SONDERN DAS JEWEILIGE ARRAY ($HTTP_*_VARS)
mfg
DMIII
Aloha!
Deine Fehlerbedschreibung deutet darauf hin das du globale Variablen verwendest! -> Weiterer Tipp: VERWENDE AUF GAR KEINEN FALL DIE GLOBALEN VARIABLEN, SONDERN DAS JEWEILIGE ARRAY ($HTTP_*_VARS)
Noch ein weiterer Tipp: Ab PHP 4.1 gibt es die superglobalen Arrays $_GET, $_POST, $_SERVER, $_ENV und $_COOKIES, die die Aufgaben von $HTTP_*_VARS übernommen haben und ab PHP 4.3 nicht mehr existieren (bis dahin gehts zweigleisig). Die neuen Arrays sind kürzer zu schreiben und (weil sie superglobal sind) brauchen in Funktionen nicht mehr mit global $HTTP_GET_VARS bekannt gemacht werden.
Allerdings vermute ich, dass das ursprüngliche Problem ganz woanders liegt.
- Sven Rautenberg
hI!
Noch ein weiterer Tipp: Ab PHP 4.1 gibt es die superglobalen Arrays $_GET, $_POST, $_SERVER, $_ENV und $_COOKIES, die die Aufgaben von $HTTP_*_VARS übernommen haben und ab PHP 4.3 nicht mehr existieren (bis dahin gehts zweigleisig). Die neuen Arrays sind kürzer zu schreiben und (weil sie superglobal sind) brauchen in Funktionen nicht mehr mit global $HTTP_GET_VARS bekannt gemacht werden.
Schon klar: Ich hab mich halt schon so an das ganze gewöhnt (und solange die alten noch gehen verwend ich sie)
mfg
DMIII
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:
---- 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