Auto Refresh Probleme

as333

Erfahrenes Mitglied
Hi,

ich möchte das wenn die Variable test den Wert 1 bekommt, dass dann die aktuelle Seite nicht aktualisiert werden soll.

Jedoch wenn die Variable einen anderen Wert bekommt soll die Seite aktualisiert werden.

Hier ist mein Code.
Klappt leider so nicht bei mir.

PHP:
if ($test=="1")
  {
   echo"Seite soll nicht aktualisiert werden!";
  }
  else
  {
  echo"Seite soll aktualisiert werden!";
  $meta = '<meta http-equiv="refresh" content="5; URL=test.php">';
  }
 
Klappt leider so nicht bei mir.

Ach, das einzige was nicht klappt ist Weltfrieden ;)

Trägst du diese Zeile in den HEAD-Container von (X)HTML ein? Da gehört sie hin.
Zudem müsstest du das Caching dir ansehen, sowohl vom Browser als auch vom Server. Das lässt sich teilweise auch über Header-Informationen regeln.
 
Ja wenn ich die Seite in den Head-Container schreibe wird aber immer die Seite aktualisiert.
Also egal ob die Variable $test den Wert 1 hat oder nicht.
 
Da siehst du das es Funktioniert ;)

Denn, wenn das von dir gezeigte Skript in der test.php ist hast du eine Endlosschleife erzeugt:
Code:
Aufruf: test.php
Inhalt:
  $test = 1?
  Nein, gebe meta-refresh aus.
  Wirkung: Aufruf test.php
Aufruf: test.php
Inhalt:
  $test = 1?
  Nein, gebe meta-refresh aus.
  Wirkung: Aufruf test.php
Aufruf: test.php
Inhalt:
  $test = 1?
  Nein, gebe meta-refresh aus.
  Wirkung: ...

Woher kommt denn $test?
Und wie wird $meta ausgegeben?
 
Ja test.php wird aufgerufen.
Und die Variable $test wird vorher durch ein eine manuelle Auswahl entweder mit 0 oder 1 gefüllt.
So wird der Variablen $test der Wert zugeordnet
Code:
$_POST["testwert"]=$test;

Aber wie gesagt, es soll nur wenn $test==1 ist die Seite aktualisiert werden.
Ansonsten nicht.


Da siehst du das es Funktioniert ;)

Wodran sehe ich das denn?
 
Unter anderem daran:
PHP:
$_POST["testwert"]=$test;

Programmiersprachen machen die Zuweisung von Variablen "rechts-assoziativ" kann man sagen. Übertragen auf die Schulzeit:
Code:
x = 7  (gültig)
7 = x  (ungültig)

In deinem Beispiel steht $test für das x und in $_POST steht der Wert. Deine gezeigte Zeile bewirkt:
Code:
Zeitpunkt                   Variable               Wert

Vor dem durchlauf           $test                   NULL
                            $_POST["testwert"]         1

Mit der Zeile               $_POST["testwert"] = $test

Nachher                     $_POST["testwert"]      NULL
                            $test                   NULL

(Führt mal einfache Tabellen hier im Forum ein :p)
 
Zuletzt bearbeitet:
Ok, das verstehe ich.
Ist es dann sinnvoller eine Session-Variable zu erstellen,
damit ich sozusagen permanent den Wert 1 für die Variable $test behalte?

Ich verstehe nur noch nicht wie dann die Seite aktualisiert wird.
 
Hört sich hier ganz interessant an und ich hätte mal eine zusätzliche Frage:

Könnte man es nicht auch mit einer Funktion realisieren, die man in den HEAD-Container schreibt und ruft diese dann auf, wenn man Sie benötigt? :

PHP:
function aktualisiere ($Wert) {
if ($Wert == "1")
{
echo"Seite soll nicht aktualisiert werden";
} else {
echo"Seite soll aktualisiert werden";
$meta = '<meta http-equiv="refresh" content="5; URL=test.php">';
}
}

sorry as333 - hab mir mal ein paar deiner Zeilen zu eigen gemacht :-)
 
Ist es dann sinnvoller eine Session-Variable zu erstellen,
damit ich sozusagen permanent den Wert 1 für die Variable $test behalte?

Ach. Aktualisiere doch einfach auf "test.php?no_refresh=1" und prüfe mit $_GET['no_refresh'] noch zusätzlich ob eine Aktualisierung notwendig ist.

Könnte man es nicht auch mit einer Funktion realisieren, die man in den HEAD-Container schreibt und ruft diese dann auf, wenn man Sie benötigt?
PHP:
function aktualisiere ($Wert) {
if ($Wert == "1")
{
echo"Seite soll nicht aktualisiert werden";
} else {
echo"Seite soll aktualisiert werden";
$meta = '<meta http-equiv="refresh" content="5; URL=test.php">';
}
}

Ja und Nein. Ja, eine Funktion ist immer möglich wenn man da mit ein paar "echo" die nötigen Meta-Tags ausgibt. Und nein, aus der von dir gezeigten (auch wenn es teilweise von as333s ist) geht es nicht, da $meta nur innerhalb der Funktion selbst verwendet werden kann (C-Verdeckungsregel in PHP). Stünde dort "echo ..." wäre es denkbar möglich.

Es kommt aber immer erst darauf an was man vor hat. Wenn man nur Weiterleiten will ohne das der Benutzer etwas sehen brauch dann hilft auch der header mit dem Feld Location: http://de.php.net/manual/de/function.header.php

Sehr schön mal, von Gumbo glaube ich, gezeigt mit:
PHP:
header('Location: foo.php', true, '307 Temporary Redirect');
oder ähnlichen Statuscodes (für Fortgeschrittene schon mal).
 
Ok super.
Mit test.php?no_refresh=1 funktioniert es.

Hätte aber diesbezüglich noch eine weitere Frage.

Ist es möglich, dass wenn ein Wert (ein UNIX-Timestamp) aus einer Datenbank ausgelesen wird und wenn die aktuelle Zeit 30 Minuten größer ist als der Wert in der Datenbank soll auf eine Seite a.php umgeleitet werden.
Bei 60 Minuten und mehr soll von der Seite a.php auf die Seite b.php umgeleitet werden.

Ist das möglich ohne das man manuell aktualisieren muss?
 
Zurück