combo: Weiterleitung mit location ?!?

Hallo,

habe ein Gästebuch-Script installiert, das nach erfolgtem Eintrag
automatisch zur Startseite weiterleiten sollte. Funktionieren solltes es hiermit:

header("location: $PHP_SELF" . "?" . $referer . $fehlermeldung . $passwort);

Leider tut es das nicht :-(
Ist leider nicht mein eigens Script, ich habe das nur angepasst. Der Autor antwortet nicht, daher ist hier die letzte Rettung!

Sieht da eventuell jemend einen Fehler?
Was nacht das "header" am Anfang, kann es daran liegen?

Vielen Dank für die Hilfe,

combo

  1. Hallo,

    habe ein Gästebuch-Script installiert, das nach erfolgtem Eintrag
    automatisch zur Startseite weiterleiten sollte. Funktionieren solltes es hiermit:

    header("location: $PHP_SELF" . "?" . $referer . $fehlermeldung . $passwort);

    Leider tut es das nicht :-(
    Ist leider nicht mein eigens Script, ich habe das nur angepasst. Der Autor antwortet nicht, daher ist hier die letzte Rettung!

    Sieht da eventuell jemend einen Fehler?

    Ich weiß ja jetzt nicht genau, an welcher Stelle diese Funktion steht, aber $PHP_SELF ist eine Variable, die den URI der momentanen Seite als Wert hat. Wenn du also an $PHP_SELF weiterleitest, dann leitest du an die Seite selbst weiter. Vielleicht ist das der Fehler.

    Was nacht das "header" am Anfang, kann es daran liegen?

    Nein, header() ist die PHP-Funktion, die das senden sog. headers (Informationen die beim Seitenaufruf u.ä. zwischen Browser und Server getauscht werden) ermöglicht. Wichtig ist hier, daß die Funktion header() nur aufgerufen werden kann, solange noch keine Zeichen an den Browser geschickt wurden. Auch ein Leerzeichen vor dem ersten PHP-Bereich ist ein solches Zeichen!

    Vielen Dank für die Hilfe,

    combo

    1. Ich weiß ja jetzt nicht genau, an welcher Stelle diese Funktion steht, aber $PHP_SELF ist eine Variable, die den URI der momentanen Seite als Wert hat. Wenn du also an $PHP_SELF weiterleitest, dann leitest du an die Seite selbst weiter. Vielleicht ist das der Fehler.

      Die Funktion steht jeweils am Ende einer anderen Funktion bzw. Aktion - quasi als automatische weiterleitung zur Startseite, damit ich das nicht manuell per Klick machen muss.

      Gibts da nicht ne andere Möglichkeit, automatisch weiterzuleiten ...

      Was nacht das "header" am Anfang, kann es daran liegen?

      Nein, header() ist die PHP-Funktion, die das senden sog. headers (Informationen die beim Seitenaufruf u.ä. zwischen Browser und Server getauscht werden) ermöglicht. Wichtig ist hier, daß die Funktion header() nur aufgerufen werden kann, solange noch keine Zeichen an den Browser geschickt wurden. Auch ein Leerzeichen vor dem ersten PHP-Bereich ist ein solches Zeichen!

      Wie kann ich sicher Gehen, dass keinen Zeichen an den Browser geschickt wurden, bzw, wie kann ich das überprüfen?

      Danke nochmal,

      combo

      1. Ich weiß ja jetzt nicht genau, an welcher Stelle diese Funktion steht, aber $PHP_SELF ist eine Variable, die den URI der momentanen Seite als Wert hat. Wenn du also an $PHP_SELF weiterleitest, dann leitest du an die Seite selbst weiter. Vielleicht ist das der Fehler.

        Die Funktion steht jeweils am Ende einer anderen Funktion bzw. Aktion - quasi als automatische weiterleitung zur Startseite, damit ich das nicht manuell per Klick machen muss.

        Gibts da nicht ne andere Möglichkeit, automatisch weiterzuleiten ...

        Es gibt natürlich noch die Möglichkeit, per <meta> weiterzuleiten
        http://selfhtml.teamone.de/html/kopfdaten/meta.htm#weiterleitung, aber das ist Client-seitig, daß heißt, der Browser kann das unterdrücken (Opera hat diese Funktion). Im Prinzip würde ich die PHP-Variante mit header() vorziehen, und ich verstehe auch nicht ganz, was nun das Problem ist. setz einfach statt $PHP_SELF die URL deiner Startseite ein, und es sollte eigentlich alles funktionieren.

        Wenn nicht, dann poste doch etwas mehr vom quelltext und eine genauere Beschreibung des Resultats, dann kann man das nochmal anschauen.

        Was nacht das "header" am Anfang, kann es daran liegen?

        Nein, header() ist die PHP-Funktion, die das senden sog. headers (Informationen die beim Seitenaufruf u.ä. zwischen Browser und Server getauscht werden) ermöglicht. Wichtig ist hier, daß die Funktion header() nur aufgerufen werden kann, solange noch keine Zeichen an den Browser geschickt wurden. Auch ein Leerzeichen vor dem ersten PHP-Bereich ist ein solches Zeichen!

        Wie kann ich sicher Gehen, dass keinen Zeichen an den Browser geschickt wurden, bzw, wie kann ich das überprüfen?

        Da PHP-Code nicht wie HTML "interpretiert" wird, sondern ausgeführt, gibt es aus Sicht von PHP nur richtig oder falsch. Soll heißen du bekommst dann eine Fehlermeldung, die in etwa so aussieht (weiß den exakten Wortlaut nicht mehr):

        couldn't sent header information
        output started at line ...

        wenn du keine Fehlermeldung bekommst, haßt du es richtig gemacht.

        Als Regel läßt sich hier sagen, daß vor dem Beginn des PHP-Blocks keine Zeichen stehen dürfen, das erste Zeichen deines quelltextes also <? sein muß. Desweiteren dürfen keine Ausgaben im PHP-Code stehen, also "echo" anweisungen o.ä. (auch nicht in per include() eingebundenen Dateien).
        Alles andere ist erlaubt, du kannst auf datenbanken zugreifen und belibig viel Code verarbeiten, solange nichts davon an den Browser geschickt wird.

        Hier ein gekürzter quelltext aus meiner Contact-seite

        if ($submit_value == "absenden") { // Email soll versandt werden
          $sentmail = mail($Mail_to,$betreff,$mailbody,$mailheaders); // Email zusammenbauen
          header("Location: thanx.php?done=contact&status=$sentmail&bp=$referer"); // Weiterleitung zu einer Dankes-seite
          exit; // Ausführung der Seite wird angehalten
        }

        Hoffe, das hilft dir weiter

        Heizer

        1. Hallo,
          kann ich mit location auch irgendwie den inhalt eines anderen Frames ändern?

          ...c.q.

          1. Hallo,
            kann ich mit location auch irgendwie den inhalt eines anderen Frames ändern?

            Ne, das ist nicht möglich, sorry.
            header("Location:...) wird außschließlich dazu verwendet, statt der momentanen Seite eine andere zu laden (REDIRECT), und das unabhängig von Browsereinstellungen.

            für weitergehende Informationen:
            http://www.php.net/manual/de/function.header.php

            ...c.q.

            1. hmmm schade gibt es sonst irgend eine Möglichkeit das zu tun ?

        2. Es gibt natürlich noch die Möglichkeit, per <meta> weiterzuleiten

          Kenne ich, ist aber nicht so elegant ...

          Da PHP-Code nicht wie HTML "interpretiert" wird, sondern ausgeführt, gibt es aus Sicht von PHP nur richtig oder falsch. Soll heißen du bekommst dann eine Fehlermeldung, die in etwa so aussieht (weiß den exakten Wortlaut nicht mehr):

          Das ist meine Fehlermeldung:

          Warning: Cannot add header information - headers already sent by (output started at /home/huensborn/www/combo/templates/header.inc:10) in /home/huensborn/www/combo/gast/konfiguration.php on line 186

          Als Regel läßt sich hier sagen, daß vor dem Beginn des PHP-Blocks keine Zeichen stehen dürfen, das erste Zeichen deines quelltextes also <? sein muß. Desweiteren dürfen keine Ausgaben im PHP-Code stehen, also "echo" anweisungen o.ä. (auch nicht in per include() eingebundenen Dateien).

          Ich glaube das könnte der Fehler sein!

          Danke für Deinen Bemühungen. Werde mal sehen ob ich das gelöst bekommen - würde Dir sonst mal den Quelltext schicken, ok?

          Bis dann, combo

        3. Als Regel läßt sich hier sagen, daß vor dem Beginn des PHP-Blocks keine Zeichen stehen dürfen, das erste Zeichen deines quelltextes also <? sein muß. Desweiteren dürfen keine Ausgaben im PHP-Code stehen, also "echo" anweisungen o.ä. (auch nicht in per include() eingebundenen Dateien).
          Alles andere ist erlaubt, du kannst auf datenbanken zugreifen und belibig viel Code verarbeiten, solange nichts davon an den Browser geschickt wird.

          Hattest Recht! Habe vorher echo und include Anweisungen, die ich aber nicht herausnehmen kann.
          Habe das Problem jetzt mit Meta bzw. manuell gelöst. Gefällt mir allerdings nicht.

          Kann ich nicht irgendwie die Anweisungen an den Browser löschen, d.h. das keinen Anweisungen mehr vor dem PHP-Block stehen - quasi wie einen Cache leeren?!?

          Oder hast Du eventuell ne andere elegante Idee ...?

          Vielen Dank nochmal,

          combo